【发布时间】:2015-12-04 21:45:15
【问题描述】:
这些查询都得到结果:
SELECT * FROM Table1 WHERE Criteria = '5'
SELECT * FROM Table1 WHERE Criteria = '3'
这个查询得到结果:
SELECT *
FROM Table1 p, Table2 m
WHERE p.UID = m.ID
AND Criteria = '5'
这个查询没有:
SELECT *
FROM Table1 p, Table2 m
WHERE p.UID = m.ID
AND Criteria = '3'
我正在尝试将这些转换为正确的连接,即使正确的表中没有记录,它也会返回结果。
我已经尝试了以下
SELECT *
FROM Table1 p LEFT JOIN Table2 m ON p.UID = m.ID
WHERE p.Criteria = '3'
AND m.OtherCriteria = 'Moron'
--0 results
我有限的理解是左连接是我需要的。我想要 left 表中的数据,即使 right 表中没有匹配的数据。由于这不起作用,我还尝试了right join、left outer join、right outer join 和full join。没有返回结果。
我错过了什么?
【问题讨论】:
-
你说它看起来对吗?可能是Caché... :(
-
从您的第一次观察 (
SELECT * FROM Table1 WHERE Criteria = '3') 中,您的 LEFT JOIN 为何“不起作用”已经很清楚了。 -
请赐教?
-
在这种情况下,尝试将 LEFT JOIN 理解为一组可选的列(来自表 2 的列)附加到主列集(来自表 1)。在某种意义上是可选的,如果它们不存在,它们将不会抑制任何行。但是,如果主查询(来自 Table1)已经没有行,那么什么都不做。
-
@rslemos 再次阅读了他的帖子,并在您的理解中包含了第一行——他说
SELECT * FROM Table1 WHERE Criteria = '3'返回行
标签: sql join intersystems-cache