我是 SQL 的新手;这是一个志愿者项目。我知道基础知识并且有使用其他编程语言的经验,但很长时间没有做过。我自己一直在寻找答案,但我无法将我发现的任何东西转化为我想做的事情。

正在使用 mysql。

我有一个包含数据列表的 table1:

id   list    list2
1    2,3,4   4
2    1,3     5,2
3    2,4,5   1
4    3       4

和另一个像这样的 table2
list   nlist
1      5
2      3
3      4
4      1
5      2

这个说法
select table1.id, table1.list, table2.nlist, table1.list2
from table1
join table2 on table1.list=table2.list;

结果是:
id   list    nlist   list2
1    2,3,4   3       4
2    1,3     5       5,2
3    2,4,5   3       1
4    3       4       4

但我需要生成这样的结果:
id   list    nlist   list2
1    2,3,4   3,4,1   4
2    1,3     5,4     5,2
3    2,4,5   3,1,2   1
4    3       4       4

本质上,将 nlist 映射到原始表中。 (id 字段是一个自动生成的键,list/nlist/list2 字段是 varchars。)(list/nlist/list2 列中的所有值都是整数或以逗号分隔的整数列表。)(哦,我做了不设计数据结构!)

我在想,不是在 select 语句的第一部分中使用 'table2.nlist',我需要在那里放置一个函数,大概是一个循环/映射类型的函数?这是正确的还是我又迷路了?
(然后我需要提取 nlist 包含一个 list2 没有的数字的行,但我还没有做到这一点。)

编辑

谢谢你!这就是最终给我所需的东西:
SELECT t1.id,
       t1.list,
       GROUP_CONCAT(t2.nlist) nlist,
       t2.list2
FROM table1 t1 JOIN table2 t2
WHERE FIND_IN_SET(t2.list,t1.list) IS TRUE
GROUP BY t1.id;

最佳答案

尝试使用 FIND_IN_SET 连接表,然后使用 GROUP_CONCAT 形成 nlist 字段:

SELECT t1.id,
       MAX(t1.list) list,
       GROUP_CONCAT(t2.newlist) nlist,
       MAX(t1.list2) list2
FROM Table1 t1
JOIN Table2 t2 on FIND_IN_SET(t2.id,t1.list)
GROUP BY t1.id

10-08 12:17