尝试获取字符串而不是ID的结果数组

时间:2019-06-20 08:38:37

标签: mysql sql

您好,我试图获得以下结果

表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

1 个答案:

答案 0 :(得分:0)

修复您的数据模型!您不应在字符串列表中存储多个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;