【问题标题】:Looking for help editing this sql statement寻求帮助编辑此 sql 语句
【发布时间】:2015-03-06 06:05:02
【问题描述】:
SELECT c.COLORNAME, x.COLORANTNAME 
FROM Color c LEFT JOIN Formula f ON c.COLORCODE = f.COLORCODE 
LEFT JOIN Colorant x on x.COLORANTCODE = f.COLORANTCODE;

我希望此代码在一行中返回一种颜色的所有着色剂名称,但它为颜色中的每种着色剂添加一行。有什么建议吗?

+---------------+----------------+ |颜色名 |着色剂名称 | +---------------+----------------+ |丹吉尔岛 |有机黄 | |丹吉尔岛 |氧化黑 | |丹吉尔岛 |氧化红 | |谷仓红 |有机黄 | |谷仓红 |氧化黑 | |谷仓红 |氧化红 | |谷仓红 |钛白 | |谷仓红 |洋红色 | |纳瓦霍红 |氧化棕 | |纳瓦霍红 |钛白 | |纳瓦霍红 |有机红 | |纳瓦霍红 |中黄 | |尘土飞扬 |氧化黑 | |尘土飞扬 |中黄 | |尘土飞扬 |洋红色 | |银 |法罗蓝 | |银 |未加工的琥珀 | |银 |洋红色 | | JPastel |未加工的琥珀 | | JPastel |中黄 | | JPastel |洋红色 | +---------------+----------------+

^这是我的 sql 语句生成的输出,但我希望它看起来像这样:

丹吉尔岛 |有机黄、氧化黑、氧化红 谷仓红 |有机黄、氧化黑、氧化红、钛白、品红 纳瓦霍红 |氧化棕、钛白、有机红、中黄、洋红

等等。

【问题讨论】:

  • 您能发布一些示例数据吗?这样更容易理解。发布表格的一些行、该查询的输出和您想要的输出。
  • 好的,我添加了输出以及我需要它的样子
  • 我认为您必须在 SELECT x.COLORANTNAME 上使用带有光标的 PLSQL。

标签: mysql


【解决方案1】:

只需使用 GROUP_CONCAT(x.COLORANTNAME) 代替 x.COLORANTNAME:

SELECT c.COLORNAME, GROUP_CONCAT( x.COLORANTNAME ) 
FROM Color c LEFT JOIN Formula f ON c.COLORCODE = f.COLORCODE 
LEFT JOIN Colorant x on x.COLORANTCODE = f.COLORANTCODE;

结果:

+---------------+--------------------------------------+
| COLORNAME     | GROUP_CONCAT(x.COLORANTNAME)         |
+---------------+--------------------------------------+
| TangierIsland | Organic Yellow,Black Oxide,Red Oxide |
+---------------+--------------------------------------+

您也可以设置不同的分隔符而不是逗号:

GROUP_CONCAT( x.COLORANTNAME SEPARATOR '-' ) 

【讨论】:

  • 感谢我是 mysql 新手并且不知道该功能我的最终代码看起来像这样并且按预期工作:选择 c.COLORNAME,GROUP_CONCAT(x.COLORANTNAME) 作为 Colorants FROM Color c left join Formula f on c.COLORCODE = f.COLORCODE left join colorant x on x.COLORANTCODE = f.COLORANTCODE group by c.COLORNAME;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2021-02-07
相关资源
最近更新 更多