我想要编写一个T-SQL
查询,在UserTable
中userId
不在其他六个表中的情况下从该表中剔除userId
。在others表中,userId
是PK
of UserTable
和FK
。
哪种方法是解决这个问题的最好方法?
我是这样写的:
select distinct userId ,Email,FName from
(
select user_id as userId,user_email as Email,user_firstname as FName from bb_user
where user_id not in ( select user_id from bb_acquire_prvider)
UNION ALL
select user_id as userId,user_email as Email,user_firstname as FName from bb_user
where user_id not in ( select user_id from bb_sell_seek)
) as userId
order by userId asc
发布于 2014-07-30 21:01:22
您可以选择以下方式之一:
Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?
出于上面提到的原因,我更喜欢NOT EXISTS
。
SELECT t1.id FROM Table1 t1
WHERE NOT EXISTS
(
SELECT 1 FROM Table2 t2 WHERE t1.id = t2.id
)
AND NOT EXISTS
(
SELECT 1 FROM Table3 t3 WHERE t1.id = t3.id
)
....
发布于 2014-07-30 21:08:31
EDIT -我想补充的是,这个解决方案只返回不存在于所有6个表中的id。所以我不确定这是你要找的,还是你不想让它返回这6个表中的任何一个。希望这是有意义的。
我使用了not exists
,并在其他表上执行了join
。
select * from table1 t1
where not exists
(
select * from table2 t2
join table3 t3 on t2.userid = t3.userid
join table4 t4 on t2.userid = t4.userid
join table5 t5 on t2.userid = t5.userid
join table6 t6 on t2.userid = t6.userid
join table7 t7 on t2.userid = t7.userid
where t1.userid = t2.userid
)
https://stackoverflow.com/questions/25037411
复制相似问题