2012-02-10 2 views
2

SQL-оператор ниже работал несколько лет назад, сейчас это не так и я получаю сообщение об ошибке:1054 - Неизвестный столбец «XXX» в «по статье»

1054 - Неизвестный столбец " Promotion_Card_details.Card_id»в„на пункте“

Это мой SQL заявление:

SELECT DISTINCT Promotion_Card_details.Card_id, 
     Promotion_Merchant_details.Merchant_id, 
     Promotion_details.Promotion_id, 
     Issuer_details.IssuerName, 
     Card_details.CCType, 
     PaymentType_details.PaymentTypeName, 
     Merchant_details.MerchantName, 
     PromotionText, 
     PromotionEndDate 
FROM Promotion_details 
INNER JOIN Card_details ON (Card_details.Card_id=Promotion_Card_details.Card_id) 
INNER JOIN Issuer_details ON (Issuer_details.Issuer_id=Card_details.Issuer_id) 
INNER JOIN PaymentType_details ON (PaymentType_details.PaymentType_id=Card_details.PaymentType_id) 
INNER JOIN Merchant_details ON (Merchant_details.Merchant_id=Promotion_Merchant_details.Merchant_id) 
INNER JOIN Promotion_Merchant_details ON (Promotion_Merchant_details.Promotion_id=Promotion_details.Promotion_id) 
INNER JOIN Promotion_Card_details ON (Promotion_details.Promotion_id=Promotion_Card_details.Promotion_id) 
WHERE ((Promotion_details.Promotion_id = '13' OR Promotion_details.Promotion_id = '14' 
      OR 
     Promotion_details.Promotion_id = '15' OR Promotion_details.Promotion_id = '16' OR 
     Promotion_details.Promotion_id = '17' OR Promotion_details.Promotion_id = '18' OR 
     Promotion_details.Promotion_id = '19' OR Promotion_details.Promotion_id = '20' OR 
     Promotion_details.Promotion_id = '21' OR Promotion_details.Promotion_id = '22' OR 
     Promotion_details.Promotion_id = '23' OR Promotion_details.Promotion_id = '24' OR 
     Promotion_details.Promotion_id = '25' OR Promotion_details.Promotion_id = '361' 
     OR Promotion_details.Promotion_id = '364' OR Promotion_details.Promotion_id = '382')) 

Любая помощь будет высоко оценена как я попытался скобки вокруг определенных частей, но она до сих пор не починил это.

+0

Не могли бы вы опубликовать DESC вашей таблицы? –

+0

Кто-нибудь переименовал или удалил поле в таблице 'Promotion_Card_details'? – Crontab

+1

Кроме того, это сделает запрос более читаемым, чтобы изменить предложение 'WHERE', чтобы использовать' IN' вместо длинного списка 'OR'. – Crontab

ответ

8

JOIN s являются лево-ассоциативными, поэтому данное задание ON может ссылаться только на таблицы, о которых уже упоминалось. Таким образом, порядок их:

FROM Promotion_details 
    INNER JOIN Card_details ON (Card_details.Card_id=Promotion_Card_details.Card_id) 
    INNER JOIN Issuer_details ON (Issuer_details.Issuer_id=Card_details.Issuer_id) 
    INNER JOIN PaymentType_details ON (PaymentType_details.PaymentType_id=Card_details.PaymentType_id) 
    INNER JOIN Merchant_details ON (Merchant_details.Merchant_id=Promotion_Merchant_details.Merchant_id) 
    INNER JOIN Promotion_Merchant_details ON (Promotion_Merchant_details.Promotion_id=Promotion_details.Promotion_id) 
    INNER JOIN Promotion_Card_details ON (Promotion_details.Promotion_id=Promotion_Card_details.Promotion_id) 

в таком порядке:

FROM Promotion_details 
    INNER JOIN Promotion_Card_details ON (Promotion_details.Promotion_id=Promotion_Card_details.Promotion_id) 
    INNER JOIN Card_details ON (Card_details.Card_id=Promotion_Card_details.Card_id) 
    INNER JOIN Issuer_details ON (Issuer_details.Issuer_id=Card_details.Issuer_id) 
    INNER JOIN PaymentType_details ON (PaymentType_details.PaymentType_id=Card_details.PaymentType_id) 
    INNER JOIN Promotion_Merchant_details ON (Promotion_Merchant_details.Promotion_id=Promotion_details.Promotion_id) 
    INNER JOIN Merchant_details ON (Merchant_details.Merchant_id=Promotion_Merchant_details.Merchant_id) 
+0

Спасибо, я попробовал. Не имеет значения, как я переупорядочу все мои инструкции INNER JOIN, первый INNER JOIN всегда будет давать ошибку # 1054 - Неизвестный столбец «XXX» в разделе «on» – James

+0

@James: Ах, я не заметил, что существуют и другие неправильно упорядоченные зависимости. Но это все та же проблема. Теперь я обновил свой ответ. – ruakh

+0

Мне жаль, что я заметил опечатку в моем SQL-заявлении выше, и я думаю, что тот, который я положил туда, чтобы заменить, теперь корректен, что бросает # 1054 - Неизвестный столбец «Promotion_Card_details.Card_id» в разделе «on» – James

Смежные вопросы