如何比较两行/多行的两个不同列

时间:2013-02-17 09:44:22

标签: sql

我需要帮助查询单个表,我需要使用两个不同的列来比较两行。

例如:

EMP Table
EmpId EmpName EmpIDNum EmpAddNum
1      xyz        123   456
2      wer        345   123
3      qwe        478   908
4      ghe        123   567
5      fde        456   123

在上表中,我需要查找具有相同ID号的行(这可以通过使用group by子句完成),我正在寻找如何获得两行,其中一行的EmpIDNum是其他行的EmpAddNum。

我需要使用单个查询来获取这两件事。 请帮忙。

3 个答案:

答案 0 :(得分:1)

关键是为同一个表创建2个别名并对其进行操作。

create table #temp(ID int, num1 int, num2 int)
insert into #temp values (1,123,234)
insert into #temp values (2,234,345)
insert into #temp values (3,345,123)

--query just to create a dummy table fro your reference
--main query starts from here

select * from #temp where ID in
((select t1.id  from #temp t1, #temp t2
where t1.num1 = t2.num2 and t1.num1 = 123),(select t2.id  from #temp t1, #temp t2
where t1.num1 = t2.num2 and t1.num1 = 123))

--sorry for not indenting it
drop table #temp


--returns
--ID    num1   num2
-- 1     123    234
-- 3     345    123

我给出的其他答案要好得多。看看吧

答案 1 :(得分:0)

如果要在第二列中匹配多于一行,则

create table #temp(ID int, num1 int, num2 int)

insert into #temp values (1,123,234)
insert into #temp values (2,234,345)
insert into #temp values (3,345,123)
insert into #temp values (4,567,123)


--query just to create a dummy table fro your reference
--main query starts from here

select * from #temp where ID in
(select t1.id  from #temp t1, #temp t2
where t1.num1 = t2.num2 and t1.num1 = 123) or ID in
(select t2.id  from #temp t1, #temp t2
where t1.num1 = t2.num2 and t1.num1 = 123)

--sorry for not indenting it
drop table #temp



--returns
--ID    num1   num2
-- 1     123    234
-- 3     345    123
-- 4     567    123

答案 2 :(得分:0)

如果我正确理解了你的问题,在SQLSerever2005 +你可以试试这个

SELECT t1.EmpID, t1.EmpName, t1.EmpIDNum, t1.EmpAddNum
FROM EMPtbl t1 
  CROSS APPLY(
              SELECT t2.EmpIDNum
              FROM EMPtbl t2
              GROUP BY t2.EmpIDNum              
              HAVING COUNT(*) > 1
              INTERSECT
              SELECT t3.EmpIDNum
              FROM EMPtbl t3              
              WHERE T1.EmpIDNum IN (t3.EmpAddNum, t3.EmpIDNum)
              ) o

SQLFiddle上的演示