1

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

例如:

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 号的行(这可以通过 usinggroup by子句完成),并且我正在寻找如何获取两行,其中一行的 EmpIDNum 是另一行的 EmpAddNum。

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

4

3 回答 3

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

我给出的另一个答案要好得多。看看它

于 2013-02-17T10:03:51.770 回答
0

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

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上的演示

于 2013-02-17T12:33:56.717 回答
0

如果你想在第二个 cloumn 中多于 1 行,那么

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
于 2013-02-17T10:34:28.317 回答