我是 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