错误配置的手动导入将我们的整个AD导入我们的帮助台用户数据库,从而创建了大量无关/重复的帐户。当然,没有备份可以从中恢复。
为了便于清理,我想运行一个查询,查找当前未链接到任何当前或已存档票证的用户。我有三个表,USER
,HD_TICKET
和HD_ARCHIVE_TICKET
。我想将ID
中的USER
字段与其他两个表中的OWNER_ID
和SUBMITTER_ID
字段进行比较,仅返回USER.ID
中的{}在其他四个栏目中都不存在。
如何实现这一目标?
答案 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
)