带有 LEFT JOIN 和 IF 语句的有限 GROUP_CONCAT
Posted
技术标签:
【中文标题】带有 LEFT JOIN 和 IF 语句的有限 GROUP_CONCAT【英文标题】:Limited GROUP_CONCAT with LEFT JOIN and IF statement 【发布时间】:2012-07-28 06:15:50 【问题描述】:我在 mysql 中有 3 个表
fruit
id| fruit
--+-------
1 | apple
2 | banana
3 | mango
4 | plum
5 | pear
6 | cherry
list
id| name
--+------------
1 | first list
2 | second list
list_content
id| list_id | fruit_id | active
--+---------+----------+-------
1 |1 |1 |1
2 |1 |2 |1
3 |1 |3 |1
4 |2 |1 |0
5 |2 |6 |1
6 |2 |5 |1
7 |2 |4 |1
8 |2 |3 |1
因此,我需要一个由id
以降序排列的列表,其中最多3 个逗号分隔的活动元素(如果active
= 1)由fruit.name
以升序排列。像这样
lists | fruits
-------+------------------
list 2 | cherry, mango, pear
list 1 | apple, banana, mango
【问题讨论】:
【参考方案1】:您可以使用SUBSTRING_INDEX 仅获得前 3 个水果。
SUBSTRING_INDEX(GROUP_CONCAT(IF(active = 1, fruit.name, null) ORDER BY fruit.name ASC),',',3)
【讨论】:
如何在查询中渗透 IF 语句?GROUP_CONCAT
忽略了null
,所以你可以把它放在那里,但是如果你能把它放在你的 WHERE/ON 子句中会更好。以上是关于带有 LEFT JOIN 和 IF 语句的有限 GROUP_CONCAT的主要内容,如果未能解决你的问题,请参考以下文章
带有冗余谓词的 LEFT JOIN 比 CROSS JOIN 执行得更好?
SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别