SELECT a.First_Name,b.EMPID,c.Phn
FROM NAME a,Emp b,Phone c
WHERE b.Emptype = 'New'
AND a.First_name,b.Last_name,C.Phn = (SELECT a.First_Name,b.Last_name,c.Phn
FROM NAME a,Emp b,Phone c
WHERE b.Emptype = 'Old')
基本上,我想搜索与旧客户具有相同详细信息(名字,姓氏和电话)的新客户。旧客户可以转换为新客户,但保留其详细信息。因此,唯一改变的是空白。
EG。 (John McEnroe 47589876 Old)转换成时(John McEnroe 475898876新) [名字,姓氏,电话,的empType]
答案 0 :(得分:0)
老兄,这是一个使用EXISTS的查询。 Exists和IN之间的主要区别在于,使用INDEX存在查询但是IN会像很多OR一样。
SELECT a.First_Name
,b.EMPID
,c.Phn
FROM NAME a
,Emp b
,Phone c
WHERE b.Emptype = 'New'
AND EXISTS (Select TOP 1 1 FROM
NAME x
,Emp y
,Phone z
WHERE
x.First_Name = a.First_Name
AND y.Last_name = b.Last_name
AND z.Phn = c.Phn
AND y.Emptype = 'Old'
)
现在,看看你的查询,你有3个表,没有连接到其他(名称,Emp,电话),所以你真的搞乱了作为输出的数据。将,基本上这个公式:
(第1表行数)乘以(第2表行数)乘以(第3表行数)
意味着如果每个表都有100行,那么你就会得到这个:
100 x 100 x 100 = 1000000结果中的行(可怕对吗?)
答案 1 :(得分:0)
WITH tempTable as (
SELECT a.First_Name,b.EMPID,c.Phn
FROM NAME a,Emp b,Phone c
where b.Emptype = 'Old'
)
select a.First_Name,b.EMPID,c.Phn
FROM NAME a,Emp b,Phone c,tempTable t
where b.Emptype = 'Old' and a.First_Name = t.First_Name
AND b.Last_name = t.Last_name
AND c.Phn = t.Phn;
试试这个......或者使用子查询...
答案 2 :(得分:0)
您可以使用多个列进行IN
查询:
AND (a.First_name,b.Last_name,C.Phn) IN (SELECT a.First_Name,b.Last_name,c.Phn
FROM ... )