Sybase外连接行为

时间:2011-04-27 11:17:12

标签: sql sybase-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 个答案:

答案 0 :(得分:4)

尝试将AND P.qty is not null从WHERE子句移动到连接表达式。