我有两个表,它们具有相同的字段,共享许多行.我想列出一个表中的所有行,这些行在另一个表中无法匹配.具体来说,这两个表是实验的两个不同版本,其结果略有不同.一个例子是这样的:
|TableA|
--------
horse
cat
cow
table
|TableB|
--------
horse
cat
chair
Run Code Online (Sandbox Code Playgroud)
我希望能够看到,TableA缺少chair从TableB,并可能在不同的查询TableB缺失cow和table从失踪TableA.
我的想法是在所有字段上进行某种外连接,然后在其中排除带有空值的行,但这似乎很重要.这是要走的路还是有更优雅/高效的方法?
OMG*_*ies 12
SELECT a.column
FROM TABLE_A a
WHERE a.column NOT IN (SELECT b.column
FROM TABLE_B b)
Run Code Online (Sandbox Code Playgroud)
如果您需要比较多个列,这是一个很好的...
SELECT a.column
FROM TABLE_A a
WHERE NOT EXISTS(SELECT NULL
FROM TABLE_B b
WHERE b.column = a.column)
Run Code Online (Sandbox Code Playgroud)
SELECT a.column
FROM TABLE_A a
LEFT JOIN TABLE_B b ON b.column = a.column
WHERE b.column IS NULL
Run Code Online (Sandbox Code Playgroud)
由于表别名,您可以交换表名而不更改查询的其余部分以查看相反的 - TABLE_B中不在TABLE_A中的行.