web-dev-qa-db-ja.com

MySQL SELECT DISTINCT複数の列

MySQLデータベースのテーブルに列a, b c, dがあるとしましょう。私がやろうとしているのは、テーブル内のこれらの4つの列すべての異なる値を選択することです(異なる値のみ)。私は次のようなものを試しました:

SELECT DISTINCT a,b,c,d FROM my_table;
SELECT DISTINCT a,b,c,d FROM my_table GROUP BY a,b,c,d;

それらのどれも機能しませんでした。誰でもここで手伝うことができますか?

ありがとうございました

NOTE列の個別の値a, b, c dが個別に必要です。値の明確な組み合わせではない

66
user765368

これは役立ちますか?

select 
(SELECT group_concat(DISTINCT a) FROM my_table) as a,
(SELECT group_concat(DISTINCT b) FROM my_table) as b,
(SELECT group_concat(DISTINCT c) FROM my_table) as c,
(SELECT group_concat(DISTINCT d) FROM my_table) as d
45
Nesim Razon

とにかく、質問が古すぎることを知っています。

select a, b from mytable group by a, b

すべての組み合わせを提供します。

58
ncastro

あなたが望む結果を推測するので、多分これはあなたが望むクエリです

SELECT DISTINCT a FROM my_table
UNION 
SELECT DISTINCT b FROM my_table
UNION
SELECT DISTINCT c FROM my_table
UNION
SELECT DISTINCT d FROM my_table
19
Adrian Cornish

別の簡単な方法は、concat()を使用することです

SELECT DISTINCT(CONCAT(a,b)) AS cc FROM my_table GROUP BY (cc);
13
Kelhen

これにより、すべての列でDISTINCT値が得られます。

SELECT DISTINCT value
FROM (
    SELECT DISTINCT a AS value FROM my_table
    UNION SELECT DISTINCT b AS value FROM my_table
    UNION SELECT DISTINCT c AS value FROM my_table
) AS derived
8
T. Brian Jones

両方のクエリが正しく、正しい答えが得られるはずです。

問題をトラブルシューティングするには、次のクエリをお勧めします。

SELECT DISTINCT a,b,c,d,count(*) Count FROM my_table GROUP BY a,b,c,d
order by count(*) desc

つまり、count(*)フィールドを追加します。これにより、groupコマンドを使用して削除された行数がわかります。

8
Hammad Khan