列中有多个值的子查询[关闭]

Posted

技术标签:

【中文标题】列中有多个值的子查询[关闭]【英文标题】:Sub query having multiple values in column [closed] 【发布时间】:2018-03-29 03:45:29 【问题描述】:

我有表 1 和 2

表 1:

+-----+----+-------------------+
| pk  | id |    description    |
+-----+----+-------------------+
| pk1 | d1 | description one   |
| pk2 | d2 | description two   |
| pk3 | d3 | description three |
+-----+----+-------------------+

表 2:

+-----+----------+
| FK  |  values  |
+-----+----------+
| pk1 | d1       |
| pk2 | d1,d2    |
| pk3 | d1,d2,d3 |
+-----+----------+

我必须从 table1 和 table2 获得以下输出

+-----+---------------------------------------------------+
| FK  |                      values                       |
+-----+---------------------------------------------------+
| pk1 | description one                                   |
| pk2 | description one,description two                   |
| pk3 | description one,description two,description three |
+-----+---------------------------------------------------+

【问题讨论】:

你使用的dbms是mysql还是Oracle? 【参考方案1】:

你的数据结构很差。您应该修复数据,使其每个fk 和每个value 都有一行。在单个列中存储多个值不是 SQL 存储数据的方式。

也就是说,您可以使用likejoin 做您想做的事情。 MySQL 代码如下所示:

select t2.fk, group_concat(t1.description order by t1.pk) as descriptions
from t2 join
     t1
     on find_in_set(t1.id, t2.values) > 0
group by t2.fk;

Oracle 提供了类似的功能,但功能不同。

【讨论】:

以上是关于列中有多个值的子查询[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

查询收集返回多个值的子查询的最大值

使用两个可以返回多个值的子查询的 SQL 之间的语句

来自 LeftJoin 的 MAX() 值的子查询

MySQL的SQL语句 - 数据操作语句(13)- 子查询

如何使用具有多个结果的子查询将值插入表中?

从提取多个值的列中查询单个值