20

これは単純なことだと確信していますが、私が試したすべての例は失敗しています。このようなテーブルをクエリしたい

ID   Part_Type   Station_Type
---  ---------   ------------
1    5           234
2    5           846
3    5           234
4    6           585
5    6           585
6    7           465

行 1 と 3、および 4 と 5 を返します。つまり、2 つの列が一致する行を返したいのです。この質問に似ています: SO 質問ですが、1 つのテーブルでのみ実行する必要があります。そのクエリはすべての行の一致を見つけますが、2 つの列に一致する値を持つ行のみが必要です。どうすればそれを見つけることができますか?

ありがとうございました

4

3 に答える 3

24

以下を使用できます。

select t1.id, t1.part_type, t1.station_type
from yourtable t1
where exists (select part_type, station_type
              from yourtable t2
              where t1.part_type = t2.part_type
                and t1.station_type = t2.station_type
              group by part_type, station_type
              having count(id) > 1)

デモで SQL Fiddle を参照してください

于 2013-02-26T23:32:44.337 に答える
4
select id, part_type, station_type 
from myTable t1
where exists (select 1 from myTable t2
              where t1.part_type = t2.part_type
                  and t1.station_type = t2.station_type
                  and t1.id <> t2.id)
于 2013-02-26T23:35:14.673 に答える
1

自己結合がうまくいくと思います:

SELECT * FROM table t1 
INNER JOIN table t2 ON t1.Part_Type = t2.Part_Type 
  AND t1.Station_Type = t2.Station_Type
  AND t1.Id <> t2.Id
于 2013-02-26T23:29:16.370 に答える