【问题标题】:Select Join From 2 table wich one of the table has array value of key from another table [duplicate]从 2 个表中选择加入,其中一个表具有来自另一个表的键的数组值 [重复]
【发布时间】:2021-05-30 18:10:48
【问题描述】:

我有 2 张桌子:

表 A

|id  | Name   |
--------------
|P001| Samsung|
|P002| Nokia  |
|P003| Oppo  |

表 B

|id   |      Value       |
--------------------------
|1    | P001,P002,P003  |

我需要一个查询来生成下面的视图

|id   |          Value       |
------------------------------
|1    | Samsung,Nokia,Oppo  |

【问题讨论】:

  • MySQL 还是 SQL-Server?
  • 这在 SQL Server 上(几乎)不可能做到,甚至在 MySQL 8+ 上也非常难看。您应该避免像这样存储 CSV 数据。
  • @Zhorov : Mysql
  • @harisj 好的,我删除了sqls-server 标签。
  • CSV(表 B)中的值是否真的可能在逗号后包含空格? 我有 2 个表 将它们作为精确的 CREATE TABLE + INSERT INTO 脚本提供。并指定精确 MySQL 版本。

标签: mysql arrays join left-join


【解决方案1】:

2.假设逗号后面没有空格,比什么查询?

SELECT b.id, GROUP_CONCAT(a.name) value
FROM a
JOIN b ON FIND_IN_SET(a.id, b.value)
GROUP BY b.id;

fiddle(证明逗号后的空格会导致输出不正确,并可能进行更正)。

当然,a.id 必须包含逗号和/或空格。

如果翻译名称的顺序很重要,您也可以将ORDER BY FIND_IN_SET(a.id, b.value) 子句添加到GROUP_CONCAT()

【讨论】:

  • 谢谢,问题解决了。
猜你喜欢
  • 2012-03-04
  • 2012-05-11
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 2021-01-13
相关资源
最近更新 更多