我需要找出一些聪明的 MySQL 片段,让我可以轻松查看两个表,表中的 id(如果存在)或 NULL 或空(如果不存在)。
我有一个用户表和一个旧表,除了手动比较之外,我不知道如何使它们一起出现在表中,以便我可以进行比较。我希望看到的是这样的:
+----------------------------+
| user_id | email | uid |
| 14 | me@me.com | 26 |
| 16 | ug@ug.com | NULL |
+----------------------------+
我知道有一种方法可以包含 NULL 或空值,但我不确定它是什么。这是到目前为止我的困惑的 SQL 查询,是的,我知道在子选择中进行子选择是可怕的:
select uid from users where mail IN (
select email from legacy_users where id NOT IN (
select sourceid from migrate_map_users
)
);
这里涉及三个表,legacy_users => migrate_map_users => users
。中间只是一个连接两者的 m2m。 Legacy_users 和 users 都有一个电子邮件列。以及他们自己的 id 版本。
谢谢大家!
最佳答案
您需要了解join types ,特别是左连接和外连接:
SELECT u.uid, u.mail, lu.id
FROM users u
LEFT OUTER JOIN legacy_users lu
ON u.email = lu.mail
WHERE lu.id NOT IN
(
SELECT sourceid
FROM migrate_map_users
);
LEFT OUTER JOIN 将确保返回左表中的所有记录,无论右表中是否有对应的记录。
关于mysql - 查找数据库中丢失的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3834572/