今天在写数据库查询语句时遇到多个条件排除另一个表中数据的问题,故记录下总结,如有错误请指出。
单条件排除:
SELECT * FROM TABLE_A A LEFT JOIN TABLE_B B ON A.ID = B.A_ID
WHERE B.A_ID IS NULL
首先我们来了解下什么是LEFT JOIN:
LEFT JOIN 关键字会从左表 ( TABLE_A) 那里返回所有的行,即使在右表 (TABLE_B) 中没有匹配的行。
所以说我们查询结果为TABLE_A表中所有数据加上TABLE_B 表中符合A.ID = B.A_ID
的数据。如果没有符合该条件的数据。则在后面补NULL。
所以我们在 WHERE后添加B.A_ID IS NULL
则从查询结果中排除了TABLE_A 数据在TABLE_B中有对应匹配的数据。
多条件排除:
在多条件排除时,由于LEFT JOIN 会返回 左表所有内容,所以在ON后面继续添加条件进行筛选还是会返回所有的内容,如果我们条件不只是A.ID = B.A_ID
还要满足A.ID>10
的数据, 以下方法并不会排除掉TABLE_A中 A.ID < 10
的内容,而是排除掉TABLE_A中A.ID < 10
且A.ID = B.A_ID
的数据。
SELECT * FROM TABLE_A A LEFT JOIN TABLE_B B ON A.ID = B.A_ID AND A.ID>10
WHERE B.A_ID IS NULL
如果希望 排除TABLE_A中 A.ID < 10
的数据需要将条件添加到WHERE 后面
SELECT * FROM TABLE_A A LEFT JOIN TABLE_B B ON A.ID = B.A_ID
WHERE B.A_ID IS NULL OR A.ID>10
总结:如果想排除右表中的数据 则将条件添加到ON后面 ,如果想排除左表中的数据(查询出来的数据),则将条件添加到WHERE后面。