2016-05-19 9 views
2

こんにちは、PHP-MySQLでは、1つの列または複数の列に同じ値を持つすべての行を見つける方法を知りたいと思います。値を指定する必要はないので、テーブル内で一意でない値を持つすべての行を探したい(つまり、少なくとも同じ値を持つ別の行があることを意味する)。 examleテーブルの列の場合1つ以上の列に全く同じ値を持つ行を見つける方法

ID | number | value

され、行は以下のとおりです。

1 | 5 | hello
2 | 6 | goodbye
3 | 7 | see you
4 | 6 | hello
5 | 6 | goodbye

私はQUEを希望しますフィールド内の同じ値を持つすべての行を見つけるにはvalueです。この場合、結果は1,4および2,4行になります。

また、両方のフィールドnumbervalueで同じ値、例の結果は、単に行2,4

になるので、私は私が唯一の共通の値を取得しますので、そのSELECT DISTINCTが合わない見つけ、すべての行を取得する必要があります行全体ではありません。 existsを使用してそれを行うには

SELECT ID, number, value 
FROM mytable 
WHERE (number, value) IN (SELECT number, value 
          FROM mytable 
          GROUP BY number, value 
          HAVING COUNT(*) >= 2) 
+4

宿題? GROUP BYを使用することも、EXISTSを使用することも、自己結合することもできます。 – jarlh

答えて

2

はこれを試してみてください。これは、異なる行のvalが等しい行を出力し、異なる行のnumは等価です。等しい場合は、異なる行のval-numの組み合わせです。

select * 
from tablename t 
where exists (select 1 from tablename t1 
       where t.id <> t1.id and (t.val = t1.val or t.num = t1.num) 
      ) 
+0

@jarlhはい、訂正していただきありがとうございます。 –

+0

ありがとうございます。私も理解したいので、基本的に 'GROUP BY .... 'はもっと複雑な条件で、' HAVE COUNT'は 'groupedby'フィールドの' WHERE'として機能しますか? –

+1

@ErnieBob 'GROUP BY'は、' GROUP BY'で指定されたフィールドに同じ値を共有するすべてのレコードをグループ化します。 'HAVING'はグループレベルで適用されるので、' COUNT(*)> = 2'は基本的には: '2'以上の人口を持つグループをすべて取得します。 –

0

もう一つの方法:秒の場合の

SELECT ID, number, value 
FROM mytable 
WHERE value IN (SELECT value 
       FROM mytable 
       GROUP BY value 
       HAVING COUNT(*) >= 2) 

と、この:

関連する問題