1

MySQL データベースに、以下に示すようなテーブルがあります。

+------------+------------+----------+----------+----- ------+  
| | 列 A | 列 B | 列_C | 列_D | 列 E |      
+------------+------------+----------+----------+----- ------+      
| | 1 | 11 | | | 0 | abc |      
| | 2 | 22 | | | 0 | abc |      
| | 3 | 33 | | | 0 | デフ |      
| | 4 | 44 | b | 0 | デフ |      
| | 5 | | | b | 0 | デフ |      
| | 6 | 55 | c | 0 | ギ |      
| | 7 | | | d | 0 | JKL|      
| | 8 | | | | | 4 | abc |      
| | 9 | | | | | 4 | abc |      
| | 10 | | | b | 4 | abc |      
| | 11 | 88 | ふ | 4 | xyz |      
| | 12 | | | ふ | 4 | xyz |      
+------------+------------+----------+----------+----- ------+      

以下のような結果が必要です (つまり、a と b の値のみが列 D と E の値が異なります)。

+------------+------------+----------+
| | 列_C | 列_D | 列 E |
+------------+------------+----------+
| | | | 0 | abc |
| | | | 0 | デフ |
| | | | 4 | abc |
| | b | 0 | デフ |
| | b | 4 | abc |
+------------+------------+----------+

私はこのクエリを試しました:

SELECT DISTINCT column_c,column_d,column_e FROM trial2 ORDER BY column_c;

私はこれを得る:

+--------------------+------------------+----------------------- -------+
| | column_c | column_d | column_e |
+--------------------+------------------+----------------------- -------+
| | | | 0 | abc |
| | | | 0 | デフ |
| | | | 4 | abc |
| | b | 0 | デフ |
| | b | 4 | abc |
| | c | 0 | ギ |
| | d | 0 | JKL|
| | ふ | 4 | xyz |
+--------------------+------------------+----------------------- -------+

column_c に「c」、「d」、または「f」を含む行は必要ありません。column_d に 0 と 4 の両方の値を持つ行が必要です (つまり、column_c は 'a' または 'b' です)。

4

3 に答える 3

1

入会しなくていい...

SELECT column_c,column_d,column_e FROM trial2 
GROUP by column_c, column_d, column_e 
HAVING count (*) > 1 
ORDER BY column_c

having 句は、集計が適用された後に機能するため、グループ化後に残っている行数でフィルター処理できます...

于 2011-11-29T08:25:34.883 に答える
0

DISTINCT行が出力に最大 1 回表示されるようにするだけです。他の行と完全に一致しない行は削除されません。

一度に複数の行を操作するには、内部結合が必要です。

SELECT t.C, t.D, t.E
  FROM trial2 AS t
    JOIN trial2 AS tb
      ON t.C=tb.C AND (t.D != tb.D OR t.E != t.E)
  GROUP BY t.C, t.D, t.E
  ORDER BY t.C;

内部結合は、一致する行がない行を除外します。上記のクエリでは、一致する行は、列 C の値が同じで、列 D または E が異なる行です。

于 2011-11-29T05:21:38.757 に答える
0

この解決策についてはよくわかりませんが、あなたが望むことはできると思います。

mysql> select * from randdata;
+------+------+------+
| a    | b    | c    |
+------+------+------+
| a    | 0    | f    |
| a    | 2    | x    |
| b    | 2    | x    |
| c    | 0    | f    |
+------+------+------+
4 rows in set (0.00 sec)

mysql> select * from randdata GROUP BY concat(b,c);
+------+------+------+
| a    | b    | c    |
+------+------+------+
| a    | 0    | f    |
| a    | 2    | x    |
+------+------+------+
2 rows in set (0.01 sec)

クエリ:

select * from trial2 GROUP BY concat(column_d,column_e);
于 2011-11-29T05:27:26.913 に答える