查找多个列和表中不存在的唯一值

时间:2014-05-29 18:07:19

标签: mysql sql

错误配置的手动导入将我们的​​整个AD导入我们的帮助台用户数据库,从而创建了大量无关/重复的帐户。当然,没有备份可以从中恢复。

为了便于清理,我想运行一个查询,查找当前未链接到任何当前或已存档票证的用户。我有三个表,USERHD_TICKETHD_ARCHIVE_TICKET。我想将ID中的USER字段与其他两个表中的OWNER_IDSUBMITTER_ID字段进行比较,仅返回USER.ID中的{}在其他四个栏目中都不存在。

如何实现这一目标?

4 个答案:

答案 0 :(得分:2)

对于右表id为null的每个关系执行左连接:

select user.*
from user
left join hd_ticket on user.id = hd_ticket.owner_id
left join hd_ticket as hd_ticket2 on user.id = hd_ticket2.submitter_id
left join hd_archive_ticket on user.id = hd_archive_ticket.owner_id
left join hd_archive_ticket as hd_archive_ticket2 on user.id = hd_archive_ticket2.submitter_id
where hd_ticket.owner_id is null
and hd_ticket2.submitter_id is null
and hd_archive_ticket.owner_id is null
and hd_archive_ticket2.submitter_id is null

答案 1 :(得分:1)

如下:

SELECT  id
FROM    user
WHERE   id NOT IN
(
    SELECT  owner_id
    FROM    hd_ticket
    UNION ALL
    SELECT  submitter_id
    FROM    hd_ticket
    UNION ALL
    SELECT  owner_id
    FROM    hd_archive_ticket
    UNION ALL
    SELECT  submitter_id
    FROM    hd_archive_ticket
)

答案 2 :(得分:0)

如果我理解你的情况,我会这样做:

SELECT a.id FROM user a, hd_ticket b, hd_archive_ticket c WHERE a.id != b.id AND a.id != c.id

答案 3 :(得分:0)

您可能想尝试下面的内容。内部查询我在哪里与其他2个表进行内连接,将仅返回所有3个表中存在的那些用户ID。然后在你的外部查询中,我只是过滤掉内部查询返回的那些ID;因为您的目标是只获取其他表中不存在的那些USER ID。

select ID 
FROM USER
WHERE ID NOT IN
(
select u.ID
from user u
inner join HD_TICKET h on u.ID = h.OWNER_ID
inner join HD_ARCHIVE_TICKET ha on u.ID = ha.SUBMITTER_ID
)