107 mysql sorting unique database-table
如何选择一个表中没有出现在另一个表中的所有行?
表格1:
+-----------+----------+------------+
| FirstName | LastName | BirthDate |
+-----------+----------+------------+
| Tia | Carrera | 1975-09-18 |
| Nikki | Taylor | 1972-03-04 |
| Yamila | Diaz | 1972-03-04 |
+-----------+----------+------------+
Run Code Online (Sandbox Code Playgroud)
表2:
+-----------+----------+------------+
| FirstName | LastName | BirthDate |
+-----------+----------+------------+
| Tia | Carrera | 1975-09-18 |
| Nikki | Taylor | 1972-03-04 |
+-----------+----------+------------+
Run Code Online (Sandbox Code Playgroud)
Table1中不在Table2中的行的示例输出:
+-----------+----------+------------+
| FirstName | LastName | BirthDate |
+-----------+----------+------------+
| Yamila | Diaz | 1972-03-04 |
+-----------+----------+------------+
Run Code Online (Sandbox Code Playgroud)
也许这样的事情应该有效:
SELECT * FROM Table1 WHERE * NOT IN (SELECT * FROM Table2)
Run Code Online (Sandbox Code Playgroud)
Ste*_*nie 167
您需要根据列名进行子选择,而不是*.
例如,如果您有id两个表共有的字段,则可以执行以下操作:
SELECT * FROM Table1 WHERE id NOT IN (SELECT id FROM Table2)
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅MySQL子查询语法.
Zan*_*ien 88
如果您在另一条注释中提到了300列,并且想要在所有列上进行比较(假设列都是相同的名称),则可以使用a NATURAL LEFT JOIN隐式连接两个表之间的所有匹配列名,以便您不必手动输入所有连接条件繁琐:
SELECT a.*
FROM tbl_1 a
NATURAL LEFT JOIN tbl_2 b
WHERE b.FirstName IS NULL
Run Code Online (Sandbox Code Playgroud)
Ruz*_*ani 38
SELECT *
FROM Table1 AS a
WHERE NOT EXISTS (
SELECT *
FROM Table2 AS b
WHERE a.FirstName=b.FirstName AND a.LastName=b.Last_Name
)
Run Code Online (Sandbox Code Playgroud)
EXISTS 会帮助你...
Ste*_*eve 32
标准的LEFT JOIN可以解决问题,如果连接上的字段被索引,
也应该更快
SELECT *
FROM Table1 as t1 LEFT JOIN Table2 as t2
ON t1.FirstName = t2.FirstName AND t1.LastName=t2.LastName
WHERE t2.BirthDate Is Null
Run Code Online (Sandbox Code Playgroud)
试试这个简单的查询。它完美地工作。
select * from Table1 where (FirstName,LastName,BirthDate) not in (select * from Table2);
Run Code Online (Sandbox Code Playgroud)
尝试:
SELECT * FROM table1
LEFT OUTER JOIN table2
ON table1.FirstName = table2.FirstName and table1.LastName=table2.LastName
WHERE table2.BirthDate IS NULL
Run Code Online (Sandbox Code Playgroud)