2

例:

表:箱

boxID  color
 01     red
 02     blue
 03     green

表: boxHas

boxID  has
 01     apple
 01     pear
 01     grapes
 01     banana
 02     lime
 02     apple
 02     pear
 03     chihuahua
 03     nachos
 03     baby crocodile

各ボックスの内容に対してクエリを実行し、各 ID、色、および各ボックスの内容を連結する列を含むテーブルを返したいので、次を使用します。

SELECT box.boxID, box.color,
GROUP_CONCAT(DISTINCT boxHas.has SEPARATOR ", ") AS contents
FROM box
LEFT JOIN boxHas ON box.boxID=boxHas.boxID
WHERE boxHas.has IN ('apple','pear')
GROUP BY box.boxID
ORDER BY box.boxID

そして、次の結果の表を取得します。

boxID  color  contents
 01     red    apple, pear
 02     blue   apple, pear

あなたへの私の質問は、列のすべてのhas値をリストしていないのはなぜですか? contents私のWHEREステートメントも私のものをトリミングしているのはなぜGROUP_CONCATですか?

私が取得しようと思っていたテーブルは次のとおりです。

boxID  color  contents
 01     red    apple, banana, grapes, pear
 02     blue   apple, lime, pear

ステートメントにboxID基づいて結果を制限したいのですが、有効なボックスのフィールドを制限したくありません。:-/WHEREcontents

ヘルプ?

4

1 に答える 1

3

WHEREの代わりにHAVING句を使用する必要があります。

SELECT box.boxID
     , box.color
     , GROUP_CONCAT(DISTINCT boxHas.has SEPARATOR ", ") AS contents
  FROM box
  LEFT JOIN boxHas 
    ON box.boxID=boxHas.boxID
 GROUP BY box.boxID
HAVING SUM(boxHas.has IN ('apple','pear')) >= 2
 ORDER BY box.boxID
于 2010-04-05T04:29:14.330 に答える