mysql - 尝试获取字符串结果数组而不是 id

标签 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

最佳答案

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

相关文章:

mysql - EclipseLink 无法获取标量 bool 值

mysql - 我如何在 Cassandra 中将此 MySQL 表建模为 super 列族?

javascript - 序列化事务批量更新,然后批量创建

mysql - 在mysql中过滤时间间隔(10分钟)之间的数据

java - 查找未正确关闭的数据库连接

java - 如何使用hibernate调用存储过程?

php - 找不到类 'mysqli_connect'

php - 某列分组显示的SQL语句

MySQL - 按小时分组,包括零值

sql - 如果发生 NULL,Where 子句拒绝行