我正在使用具有以下列的表[user]
user_id | em_id | em_id_original
--------|-------|---------------
1 | 32 | NULL
2 | 43 | 32
3 | 14 | 13
4 | 75 | 98
5 | 98 | NULL
...
现在,我要查找两列 em_id 和 em_id_original 相同的行对。因此,如果您在上面的表上运行查询,它将生成以下输出。
user_id | em_id | em_id_original
--------|-------|---------------
1 | 32 | NULL
2 | 43 | 32
4 | 75 | 98
5 | 98 | NULL
第一对(用户ID 1和2):em_id = em_id_original = 32
第二对(用户ID 4和5):em_id = em_id_original = 98
谢谢
答案 0 :(得分:1)
您可以使用相关子查询和EXISTS
来检查是否存在一行对应项。
SELECT u1.user_id,
u1.em_id,
u1.em_id_original
FROM `[user]` u1
WHERE EXISTS (SELECT *
FROM `[user]` u2
WHERE u2.em_id = u1.em_id_original)
OR EXISTS (SELECT *
FROM `[user]` u2
WHERE u2.em_id_original = u1.em_id);
答案 1 :(得分:0)
在我看来,您可以使用一个简单的子查询来完成此操作,尽管我不得不跳到有关数据集的一些结论,如果这个错误,您可能想向数据中添加更多例外,以便我们做得更好了解您的模型。
SELECT user_id, em_id, em_id_original
FROM [user]
WHERE em_id_original IS NULL OR em_id_original IN (SELECT em_id FROM [user])
答案 2 :(得分:0)
使用自我加入:
select distinct u1.*
from `user` u1 inner join `user` u2
on u2.em_id_original = u1.em_id or u1.em_id_original = u2.em_id
order by u1.user_id
如果在任何情况下distinct
在em_id
中都不会出现多次,则可以删除u1.em_id_original
,反之亦然。
请参见demo。
| user_id | em_id | em_id_original |
| ------- | ----- | -------------- |
| 1 | 32 | NULL |
| 2 | 43 | 32 |
| 4 | 75 | 98 |
| 5 | 98 | NULL |
答案 3 :(得分:0)
您可以尝试
SELECT *
FROM test t
WHERE EXISTS ( SELECT 'a'
FROM test t2
WHERE t2.em_id = t.em_id_original
)
OR EXISTS ( SELECT 'a'
FROM test t2
WHERE t2.em_id_original = t.em_id
)