1

2 つの異なる列を使用して 2 つの行を比較する必要がある単一のテーブルを照会するには、助けが必要です。

例えば:

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句を使用して実行できます)、1 つの行の EmpIDNum が他の行の EmpAddNum である 2 つの行を取得する方法を探しています。

1 つのクエリを使用して、これら 2 つのことを取得する必要があります。助けてください。

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

私があなたの質問を正しく理解していれば、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のデモ

于 2013-02-17T12:33:56.717 に答える
0

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)
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 に答える