带有 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的主要内容,如果未能解决你的问题,请参考以下文章

SQL IF 和 LEFT JOIN 导致数据库出现故障

带有条件 CASE 语句的 SQL LEFT JOIN

带有冗余谓词的 LEFT JOIN 比 CROSS JOIN 执行得更好?

SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别

SQL语句多表left join SUM出现的重复数据问题!

SQL语句(inner join,left out join,right out join三者的不同