0

col1 が重複しているテーブルのすべての行を表示したいと思います。

+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 |    0 |    0 |
|    1 |    1 |    1 |
|    2 |    0 |    0 |
|    3 |    0 |    0 |
|    3 |    1 |    1 |
|    4 |    0 |    0 |
+------+------+------+

結果は次のようになります。

+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 |    0 |    0 |
|    1 |    1 |    1 |
|    3 |    0 |    0 |
|    3 |    1 |    1 |
+------+------+------+

いくつかのクエリを試してみましたがうまくいかなかったので、ここであなたの助けを求めています。

4

6 に答える 6

6

SQL サーバーのバージョンに応じて、以下を使用できます。

select col1, col2, col3
from
(
  select col1, col2, col3,
    count(col1) over(partition by col1) cnt
  from yourtable
) src
where cnt > 1

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

于 2013-01-09T16:33:21.967 に答える
3
select t.col1, t.col2, t.col3
from mytable t join (select col1 
                     from mytable 
                     group by col1 
                     having count(*) > 1) t2
  on t.col1 = t2.col1
于 2013-01-09T16:32:02.827 に答える
3

バリアント ソリューションをもう 1 つ追加します。or制約pkを持つ列がある場合は、次を使用できます。UNIQUEPRIMARY KEY

select col1, col2, col3
from <yourTable> t1
where exists
  (select *
   from <yourTable> t2
   where t2.col1 = t1.col1
     and t2.pk <> t1.pk
  ) ;
于 2013-01-09T16:42:53.670 に答える
2
select col1, col2, col3
from <yourTable> t1
where exists
  (select null
   from <yourTable> t2
   where t2.col1 = t1.col1
   group by t2.col1
   having count(*) > 1)

sqlFiddle

于 2013-01-09T16:31:15.000 に答える
2

テーブルの名前が T5 の場合は、次を使用します。

SELECT COL1, COL2, COL3
FROM T5
WHERE COL1 IN
(
    SELECT COL1
    FROM T5
    GROUP BY COL1
    HAVING COUNT(COL1)>=2
)

私がチェックしたところ、上記は非標準のSQLを使用すべきではありません。他の方もそうだと思います。

于 2013-01-09T16:41:54.040 に答える
1

手遅れだと思いますが、左参加はどうですか...

SQLFIDDLEデモ

クエリ:

SELECT DISTINCT x.col1, x.col2, x.col3 
FROM ab y
LEFT JOIN 
ab x
ON y.col1=x.col1 and ( y.col2<> x.col2
                    OR x.col3<>y.col3 )
where not (x.col3 is null)
and not (x.col2 is null)
;

結果:

COL1    COL2    COL3
1       0   0
1       1   1
3       0   0
3       1   1
于 2013-01-09T16:47:29.463 に答える