30

次のようなmysqlテーブルがあります。

1   value1    value2    3534
2   value1    value1    8456
3   value1    value2    3566
4   value1    value3    7345
5   value2    value3    6734

異なる列 2 と 3 を持つすべての行を選択するクエリが必要です。たとえば、この例で必要な出力は次のようになります。

1   value1    value2    3534
2   value1    value1    8456
4   value1    value3    7345
5   value2    value3    6734

私はそれを行う方法についていくつかのサンプルを見つけましたが、それらはすべて各列で個別に個別に選択します。

4

6 に答える 6

37

更新 1

これを上記に対して使用することをお勧めします。

SELECT id, col2, col3, col4
FROM yourtable
GROUP BY col2, col3;

デモ

私が言っている理由は、この場合、CONCAT を使用すると、望ましい結果が得られないからです。最初のクエリは5行を返しますが、CONCATは4行を返しますが、これは正しくありません。

あなたが私の主張を理解してくれることを願っています。


テーブルの列が (id、col2、col3、col4) であると仮定します。

SELECT DISTINCT(CONCAT(col2, col3)) as "dummy column", id, col2, col3, col4
FROM yourtable
GROUP BY CONCAT(col2, col3);

また

SELECT id, col2, col3, MIN(col4)
FROM yourtable
GROUP BY col2, col3;

実際の作業例

于 2012-06-30T20:20:46.417 に答える
23

最初の列が一意であると仮定すると、次のことができます。

SELECT id, col2, col3, col4
FROM yourtable
WHERE id IN
(
    SELECT MIN(id)
    FROM yourtable
    GROUP BY col2, col3
)

オンラインで動作することを確認してください: sqlfiddle

于 2012-06-30T20:06:05.330 に答える
1

テーブルの列が であると仮定すると、次の(id, col1, col2, col3)ことができます。

SELECT  *
FROM    YourTable yt
JOIN    (
        SELECT  MIN(id) as minid
        FROM    YourTable
        GROUP BY
                col1, col2
        ) filter
ON      filter.minid = yt.id
于 2012-06-30T20:06:13.257 に答える
0

これに対する最も簡単なクエリは

SELECT col1, col2, MIN(col3)
FROM myTable
GROUP BY col1, col2
于 2012-06-30T20:14:40.910 に答える
0

このクエリは、列 3 の最小値を選択しながら、列 1 と列 2 の組み合わせが一意であることを確認します。

SELECT col1, col2, MIN(col3)
FROM yourTable
GROUP BY col1, col2
于 2012-06-30T20:07:57.953 に答える