我需要帮助来理解这件事,下面两个查询之间有什么区别,我只知道它们不会返回相同的结果。
查询 1:
SELECT a.col1, b.c1
FROM A a
LEFT JOIN B b
ON a.col1 = b.c1
WHERE b.status = 'Y'
查询 2:
SELECT a.col1, b.c1
FROM A a, B b
WHERE a.col1 *= b.c1
AND b.status = 'Y'
最佳答案
第一个查询:
SELECT
a.col1, b.c1
FROM
a LEFT JOIN b ON a.col1 = b.c1
WHERE
b.status = 'Y' ;
等效于内连接,因为
b.status
列(来自左外连接的右侧)用于 WHERE
部分:SELECT
a.col1, b.c1
FROM
a INNER JOIN b ON a.col1 = b.c1
WHERE
b.status = 'Y' ;
第二个查询(可能)执行为:
SELECT
a.col1, b.c1
FROM
a LEFT JOIN b ON a.col1 = b.c1
AND b.status = 'Y' ;
这可能会给出不同的结果,因为它是一个(逻辑上)不同的查询。
这就是您永远不应该使用这种旧语法的原因之一。有时它是模棱两可的,例如当存在多个条件或多个外部联接时。
关于sql - Sybase ASE 15 中左连接和 *= 之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13765173/