我正在研究一些遗留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
答案 0 :(得分:4)
尝试将AND P.qty is not null
从WHERE子句移动到连接表达式。