Table1 (id, name) Table2 (id, name)

查询:

SELECT name   
FROM table2  
-- that are not in table1 already

当前回答

看到查询:

SELECT * FROM Table1 WHERE
id NOT IN (SELECT 
        e.id
    FROM
        Table1 e
            INNER JOIN
        Table2 s ON e.id = s.id);

从概念上讲是:在子查询中获取匹配的记录,然后在主查询中获取不在子查询中的记录。

其他回答

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

问:这里发生了什么?

答:从概念上讲,我们从table1中选择所有行,对于每一行,我们尝试在table2中为name列找到具有相同值的行。如果没有这样的行,我们就把结果的table2部分留给该行。然后,通过只选择结果中匹配行不存在的行来限制选择。最后,我们忽略结果中的所有字段,除了name列(table1中我们确定存在的字段)。

虽然它可能不是在所有情况下性能最好的方法,但它应该适用于几乎所有试图实现ANSI 92 SQL的数据库引擎

你可以选择

SELECT name
FROM table2
WHERE name NOT IN
    (SELECT name 
     FROM table1)

or

SELECT name 
FROM table2 
WHERE NOT EXISTS 
    (SELECT * 
     FROM table1 
     WHERE table1.name = table2.name)

请看这个问题的3个技巧来完成这个任务

看到查询:

SELECT * FROM Table1 WHERE
id NOT IN (SELECT 
        e.id
    FROM
        Table1 e
            INNER JOIN
        Table2 s ON e.id = s.id);

从概念上讲是:在子查询中获取匹配的记录,然后在主查询中获取不在子查询中的记录。

SELECT <column_list>
FROM TABLEA a
LEFTJOIN TABLEB b 
ON a.Key = b.Key 
WHERE b.Key IS NULL;

https://www.cloudways.com/blog/how-to-join-two-tables-mysql/

首先定义表的别名,如t1和t2。 然后得到第二个表的记录。 然后使用where条件匹配记录:

SELECT name FROM table2 as t2
WHERE NOT EXISTS (SELECT * FROM table1 as t1 WHERE t1.name = t2.name)