嗨,我正在尝试获得以下结果
表1
ID | Name
1 | Name1
2 | Name2
表2
ID | State | NameIDS
1 | NY | 1,2
2 | ZA | 1
我试图加入整个数组,所以我得到了
ID | State | NameIDS
1 | NY | Name1,Name2
2 | ZA | Name1
尝试在单个查询中获取此内容
Select Table2.ID,State,Table1.Name
From Table2
JOIN Table1 ON FIND_IN_SET(Table1.ID, Table2.NameIDS) != 0
但这给了我
ID | State | NameIDS
1 | NY | Name1
1 | NY | Name2
2 | ZA | Name1
最佳答案
修复您的数据模型!不应在字符串列表中存储多个 id。以下是一些很好的理由:
- 数字应存储为数字,而不是字符串。
- 列应仅包含一个值。
- 数据库在字符串函数方面的表现不是很好或效率不高。
- 应使用正确的外键关系来声明 ID。
- 数据库具有用于存储列表的出色结构。它被称为表!
有时,您会被其他人非常非常非常糟糕的数据建模决策所困扰。如果是这种情况,您可以这样做:
select t2.ID, t2.State,
group_concat(t1.Name order by t1.id) as names
from Table2 t2 join
Table1 t1
on find_in_set(t1.ID, t2.NameIDS) <> 0
group by t2.ID, t2.State;
关于mysql - 尝试获取字符串结果数组而不是 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56682132/