MySQL Неизвестный столбец в 'на предложении' - PullRequest
4 голосов
/ 02 декабря 2011

Мой запрос выглядит как

SELECT t2.id, t3.id, t3.sys_modified_date, t3.sys_created_date, 
    t3.email, t3.enabled, t3.password, t3.passwordagain, t4.id, 
    t4.sys_modified_date, t4.sys_created_date, t4.job, t4.name, 
    t4.surname, t3.retrivalHash, t3.username 
FROM Customer_Contractor t0 INNER JOIN Contractor t1 ON t0.contractor = 
    t1.id INNER JOIN User t3 ON t2.id = t3.partyId LEFT OUTER JOIN 
    Profile t4 ON t3.profileId = t4.id, Party t2 
WHERE t0.customer = ? 
ORDER BY t2.id ASC 

Я получаю сообщение об ошибке:

Неизвестный столбец 't2.id' в 'предложении'

Я не знаю, что не так, пожалуйста, помогите мне с этим.

Ответы [ 4 ]

3 голосов
/ 02 декабря 2011

В вашем запросе Party t2 находится не в той же области, что и остальные объединенные таблицы ANSI-92 - вот почему INNER JOIN User t3 ON t2.id = t3.partyId не получается.

Я подозреваю, что вы хотите что-то вроде:

SELECT t2.id, t3.id, t3.sys_modified_date, t3.sys_created_date, 
    t3.email, t3.enabled, t3.password, t3.passwordagain, t4.id, 
    t4.sys_modified_date, t4.sys_created_date, t4.job, t4.name, 
    t4.surname, t3.retrivalHash, t3.username 
FROM Customer_Contractor t0 
INNER JOIN Contractor t1 ON t0.contractor = t1.id 
INNER JOIN Party t2 ON t1.id = t2.id
INNER JOIN User t3 ON t2.id = t3.partyId 
LEFT OUTER JOIN Profile t4 ON t3.profileId = t4.id
WHERE t0.customer = ? 
ORDER BY t2.id ASC 
1 голос
/ 02 декабря 2011

Предложение ON может «видеть» только псевдонимы таблиц, которые определены слева от этого предложения ON в той же группе ссылок на таблицы, другими словами, в той же группе объединений.

* 1004Псевдоним t2 не находится ни слева от конкретного предложения ON, которое на него ссылается, ни даже в той же группе ссылок таблицы.(Отдельные группы разделяются запятыми.)

Предложение WHERE является единственным местом, где можно ссылаться на все псевдонимы, определенные во всех ссылочных группах таблиц.Но на вашем месте я бы заменил это запятое на соответствующее явное соединение.

Ссылка:

1 голос
/ 02 декабря 2011

Вам необходимо явно присоединиться к таблице Party (с псевдонимом t2).Без этого СОЕДИНЕНИЯ условие включения не имеет смысла.

Не зная структуры ваших таблиц, трудно понять, как вы можете явно присоединиться к Party.

1 голос
/ 02 декабря 2011

Правильно. Нет таблицы с псевдонимом t2, когда псевдоним используется впервые

Вы делаете это

Customer_Contractor t0
INNER JOIN
Contractor t1 ON t0.contractor = t1.id
INNER JOIN
User t3 ON t2.id = t3.partyId
LEFT OUTER JOIN 
Profile t4 ON t3.profileId = t4.id
CROSS JOIN
Party t2 

Когда я подозреваю, что вы хотите этого (правда? Кросс-соединение?)

Customer_Contractor t0
INNER JOIN
Contractor t1 ON t0.contractor = t1.id
CROSS JOIN
Party t2 
INNER JOIN
User t3 ON t2.id = t3.partyId
LEFT OUTER JOIN 
Profile t4 ON t3.profileId = t4.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...