左连接到同一个表SQL
我试图在同一查询中对同一个表进行左联接,但结果不正确,我用子查询解决了问题这是错误的查询:左连接到同一个表SQL,sql,sql-server,Sql,Sql Server,我试图在同一查询中对同一个表进行左联接,但结果不正确,我用子查询解决了问题这是错误的查询: 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.
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”别名上的次要条件 因此,您的主要标准是ta.state为“C”,但仅当lta的第二个(左连接)别名中的“a”和“E”实例不匹配时,对于“NOT existance”检查案例,我强烈建议您使用
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
子句。向下投票歇斯底里?
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')
)