我有2个表(我使用的是T-SQL)
Table1
ID First_Name Last_Name Phone
-- ---------- --------- --------------
1 John Smith (643) 434-4343
2 Dave Miller (543) 344-3432
3 Tiffany Ovally (434) 343-6598
4 Dan Davis (534) 342-9876
5 Mike Kolis (454) 345-3434
Table2
Iden FirstN LastN PhoneN
---- ------ ----- ------
J-09 Tiffany Ovally (434) 343-6598
K-98 Dan Davis (534) 342-9876
W-03 Dave Miller (543) 344-3432
C-34 Mike Kolis (454) 345-3434
我需要检查表1中的键值是否存在于表2中
我正在做以下
IF NOT EXISTS(SELECT * FROM Table2 t2
WHERE t2.FirstN = (Select First_Name from Table1 where ID = @ID)
AND t2.LastN = (Select Last_Name from Table1 where ID = @ID)
AND t2.PhoneN = (Select Phone from Table1 where ID = @ID)
)
BEGIN
....
END
不确定是否有更有效的方法来执行此操作,因为我正在为每个字段执行子查询..
由于
答案 0 :(得分:1)
你必须比较执行计划,看看性能如何比较,但这对我来说似乎有点清洁:
SELECT t1.*
FROM Table1 as t1
LEFT JOIN Table2 as t2
ON t1.First_Name = t2.FirstN
AND t1.Last_Name = t2.LastN
AND t1.Phone = t2.PHone
WHERE t2.Iden IS NULL
答案 1 :(得分:0)
您可以尝试查看EXCEPT关键字。 EXCEPT功能的简要定义是
EXCEPT返回左查询中没有的任何不同值 也在正确的查询中找到。
使用示例表的解决方案是, SELECT t1.First_Name,t1.Last_Name,t1.Phone FROM Table1 t1 除了 SELECT t2.First_Name,t2.Last_Name,t2.Phone FROM Table2 t2
答案 2 :(得分:0)
您的查询正在查找Table2中与Table1中的记录不匹配且ID为@ID的记录。在这里使用INNER JOIN比使用多个子查询更好:
IF NOT EXISTS (SELECT *
FROM FROM Table1 t1
INNER JOIN Table2 t2
ON t1.First_Name = t2.FirstN
AND t1.Last_Name = t2.LastN
AND t1.Phone = t2.PhoneN
WHERE t1.ID = @ID)
BEGIN
....
END