3

私は mysql が初めてで、助けが必要です。値が存在するテーブルからすべての行を選択したいが、その値は選択しない:

例えば:

ID           ITEM
--------------------
1             AA
1            22S
1             AB
2            F45
2             BB
3             1
3             1
3             AA
3            F45
3            F67
3             A
......

SELECT ID, ITEM FROM TABLE1 IF 項目 "AA" が "AA" 以外に存在し、次のように返されます。

1  225,AB
3  1,1,F45,F67,A

これを行うための実際のクエリは何ですか? ありがとうございました

4

4 に答える 4

0

ここで、「id」は別のテーブルへの外部キーのように見えます (id は通常 ID を意味するため)。そのようなテーブルがある場合、求めるデータは次のように返されます。

SELECT y.id, y.item
FROM yourtable y
INNER JOIN othertable o
ON y.id=o.id
INNER JOIN yourtable a
ON a.id=o.id
WHERE a.item='AA'
AND y.item<>'AA'

ただし、これは複数の行を返します (たとえば、id 1 - 1,225 と 1,AB の 2 つのエントリ)。結果を 1 行にまとめるには (通常は非常に悪い習慣です - 結果セットがクエリで再利用できない場合):

SELECT y.id, GROUP_CONCAT(y.item)
FROM yourtable y
INNER JOIN othertable o
ON y.id=o.id
INNER JOIN yourtable a
ON a.id=o.id
WHERE a.item='AA'
AND y.item<>'AA'
GROUP BY y.id

別のテーブルがない場合でも、欠落しているテーブルの再作成を再作成することで可能です。

SELECT y.id, GROUP_CONCAT(y.item)
FROM yourtable y
INNER JOIN (
     SELECT DISTINCT a.id
     FROM yourtable a
     WHERE a.item='AA'
) o
ON y.id=o.id
WHERE y.item<>'AA'
GROUP BY y.id

ところで、同じ列に異なるタイプのデータを混在させることも悪い考えです。

于 2013-08-13T11:13:01.663 に答える