[英]Left join to same table SQL
我试图在同一个查询中对同一个表进行左连接,但结果不是okey,我用子查询解决了这个问题,这是错误的查询:
SELECT * FROM TableA ta
LEFT JOIN TableA Lta ON ta.key = Lta.key
AND ta.state IN('C')
AND Lta.state IN ('A','E')
WHERE Lta.key is null
这就是我解决的方式
SELECT * FROM (
SELECT * FROM TableA ta
WHERE ta.state IN('C')
) AS T LEFT JOIN TableA Lta ON T.key = Lta.key
AND Lta.state in ('A','E')
WHERE Lta.key IS NULL
如果您能给我一些与此主题相关的信息,我会对这些疑问感到困惑,我将非常感谢您
谢谢
您的第一个查询非常接近。 将“ta.state”移动到where子句。 连接是两个表的关系,但是次要标准就是“lta”别名。
SELECT
*
FROM
TableA ta
LEFT JOIN TableA Lta
ON ta.key = Lta.key
AND Lta.state IN ('A','E')
WHERE
ta.state IN('C')
AND Lta.key is null
所以你的主要标准是ta.state为“C”的地方,但是只有当lta的第二个(左连接)别名中的“A”和“E”实例不匹配时
对于“不存在”检查案例,我强烈建议您使用not exists
子查询:
SELECT * FROM TableA ta
WHERE not exists
(
SELECT 1 FROM TableA Lta
WHERE ta.key = Lta.key
AND ta.state IN('C')
AND Lta.state IN ('A','E')
)
这是性能最友好的方法。
不确定,但你可能应该将ta.state = 'C'
移动到外部where
子句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.