我需要帮助查询单个表,我需要使用两个不同的列来比较两行。
例如:
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。
我需要使用单个查询来获取这两件事。 请帮忙。
答案 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上的演示