Sql - идентификатор из нескольких частей не может быть связан - PullRequest
1 голос
/ 27 февраля 2012
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'

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

идентификатор страницы из нескольких частей не может быть связан.

Я проверил синтаксиснаписание и оба, кажется, правильные.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 27 февраля 2012

Вам нужно будет сделать явные объединения. В настоящее время вы используете старый синтаксис соединения. Рассмотрим рефакторинг:

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'
1 голос
/ 27 февраля 2012

Вы можете заставить ваш запрос работать, изменив порядок таблиц в 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 - это правильный способ написания запросов.

...