1
实施例缺少的数据:MySQL的GROUP_CONCAT + IN()= :-(
表:框
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
我的问题是:为什么不是列出contents
列中的所有has
值?为什么我的WHERE
声明也裁剪了我的GROUP_CONCAT
?
我想我一定要得到的表是:
boxID color contents
01 red apple, banana, grapes, pear
02 blue apple, lime, pear
虽然我想基于WHERE
语句来限制我boxID
结果,我做不要限制有效盒contents
场。 : -/
帮助?
这正是我需要的。在相同的查询中可以使用-WAVE-与-WHERE-一起使用吗? – Drew 2010-04-05 04:43:53
是的,他们可以在同一时间使用,只要记住WHERE是每行的第一个过滤器,并且HAVING是第二个过滤器,它作用于您的聚集(分组)数据 – 2010-04-05 04:48:31
再次感谢您。这是一个大规模的自定义查询中最后一块失踪! :-) – Drew 2010-04-05 05:08:27