table1 (id, name) table2 (id, name)
查询。
SELECT name
FROM table2
-- that are not in table1 already
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
Q:这里发生了什么?
A:从概念上讲,我们从table1
中选择所有的记录,对于每一条记录,我们试图在table2
中找到与name
列有相同值的记录。如果没有这样的记录,我们就把结果中的table2
部分留空。然后我们限制我们的选择,只选择结果中不存在匹配行的那些行。最后,我们忽略结果中的所有字段,除了name
列(我们确定存在的那一列,来自table1
)。
虽然这可能不是在所有情况下最有效的方法,但它基本上在所有试图实现ANSI 92 SQL的数据库引擎中都是有效的。
SELECT <column_list>
FROM TABLEA a
LEFTJOIN TABLEB b
ON a.Key = b.Key
WHERE b.Key IS NULL;
[![在此输入图像描述][1]][1]
[https://www.cloudways.com/blog/how-to-join-two-tables-mysql/][2]
[1]: https://i.stack.imgur.com/mjS7g.png [2]: https://www.cloudways.com/blog/how-to-join-two-tables-mysql/
这工作对我来说很重要
SELECT *
FROM [dbo].[table1] t1
LEFT JOIN [dbo].[table2] t2 ON t1.[t1_ID] = t2.[t2_ID]
WHERE t2.[t2_ID] IS NULL
我'要把正确的答案转帖(因为我'还没酷到可以评论)......以防有人认为需要更好的解释。
SELECT temp_table_1.name
FROM original_table_1 temp_table_1
LEFT JOIN original_table_2 temp_table_2 ON temp_table_2.name = temp_table_1.name
WHERE temp_table_2.name IS NULL
而且我'在mySQL中看到from中的语法需要表名之间的逗号,但在sqlLite中似乎更喜欢用空格。
最重要的是当你使用不好的变量名时,会留下问题。 我的变量应该更有意义。 而且应该有人解释为什么我们需要逗号或者不需要逗号。