Sql - идентификатор из нескольких частей не может быть связан
select distinct
page0.MatterType,
page0.Name,
page0.MatterNo,
page0.security,
page0.serial,
page6.TribCaseNo,
contact0.Name as Cname
from
page0, page6, page14
left join
contact0 on page0.PrimaryContact = contact0.linkserial
where
page0.serial = page6.CaseSerial
AND page0.serial = page14.CaseSerial
AND (page14.staffmember = '100001^24' and page14.status != 'Inactive')
AND page0.status != 'Closed'
Я получаю сообщение об ошибке
многоэлементный идентификатор page0.PrimaryContact не может быть связан.
Я проверил синтаксис и орфографию, и оба, кажется, правильно.
Спасибо!
2 ответа
Решение
Вы можете заставить ваш запрос работать, изменив порядок таблиц в FROM
:
select distinct
page0.MatterType,
page0.Name,
page0.MatterNo,
page0.security,
page0.serial,
page6.TribCaseNo,
contact0.Name as Cname
from
page6, page14, page0 --NOTE: page0 is now closest to join!!!
left join
contact0 on page0.PrimaryContact = contact0.linkserial
where
page0.serial = page6.CaseSerial
AND page0.serial = page14.CaseSerial
AND (page14.staffmember = '100001^24' and page14.status != 'Inactive')
AND page0.status != 'Closed'
Обновление
В общем, я настоятельно рекомендую вам не смешивать старый и новый синтаксис (как это делается здесь), решениеp.campbell является правильным способом написания запросов.
Вам нужно будет сделать явные объединения. В настоящее время вы используете старый синтаксис соединения. Рассмотрим рефакторинг:
select P0.*, P6.TribCaseNo, C0.Name as Cname
FROM page0 AS P0
INNER JOIN page6 AS P6 on P0.serial = P6.CaseSerial
INNER JOIN page14 AS P14 ON P0.serial = P14.CaseSerial
LEFT JOIN contact0 AS C0 on P0.PrimaryContact = C0.linkserial
WHERE (P14.staffmember = '100001^24' AND P14.status != 'Inactive')
AND P0.status != 'Closed'