【发布时间】:2011-04-27 11:17:12
【问题描述】:
我正在处理一些旧版 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
【问题讨论】: