#sql #sap-ase
#sql #sap-ase
Вопрос:
Я работаю над некоторым устаревшим SQL (написанным на языке sybase) и преобразовываю его в форму, совместимую с SQL-92. Проблема в том, что я не могу понять, как ведет себя «* =».
запрос (подвергнутый соответствующей цензуре):
SELECT
C.*, SUM(P.qty) from Cars C, Parts P
WHERE
C.carid = 1
AND C.carid *= P.carid
AND C.missingpart *= P.missingpart
AND C.manufacturer *= P.manufacturer
AND P.qty is not null
GROUP BY C.carid, C.missingpart, C.manufacturer
Я преобразовал его в:
SELECT
C.*, SUM(P.qty) from Cars C
LEFT JOIN Parts P
ON C.carid = P.carid
AND C.missingpart = P.missingpart
AND C.manufacturer = P.manufacturer
WHERE
C.carid = 1
AND P.qty is not null
GROUP BY C.carid, C.missingpart, C.manufacturer
Но оказывается — они не эквивалентны. Может кто-нибудь помочь мне понять, каково точное поведение «* =» во внешних соединениях sybase и почему мои два запроса не идентичны?
Спасибо 🙂
PS: Я использую Sybase ASE TDS 5.5
Ответ №1:
Попробуйте перейти AND P.qty is not null
от предложения WHERE к выражению join.
Комментарии:
1. Я нашел эту ссылку: sybase.com/content/1017447/tsql.pdf многое объясняет в этом siht.