时间:2018-03-29 03:45:30

标签: mysql sql oracle subquery

我有桌子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 |
+-----+---------------------------------------------------+

1 个答案:

答案 0 :(得分:3)

您的数据结构非常糟糕。您应该修复数据,使其每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提供类似的功能,但功能不同。