mysql - 如何在子查询中使用 in 子句

标签 mysql

我有如下两张表,

表 1:

ID      NAME    
------  --------
IM-1    Pencil  
IM-2    Pen     
IM-3    NoteBook
IM-4    Eraser  

表 2:

ID      ITEM_ID       
------  --------------
MT-1    IM-1          
MT-2    IM-1,IM-2,IM-3     
MT-3    IM-1,IM-2,IM-4

要求的结果是:

ID      ITEMNAME
------  --------
MT-1    Pencil  
MT-2    Pencil,Pen,NoteBook  
MT-3    Pencil,Pen,Eraser  

但是通过使用查询


SELECT T2.ID, 
          (SELECT T1.NAME 
           FROM TABLE1 AS T1 
           WHERE T1.ID IN (T2.ITEM_ID)) AS ITEMNAME 
    FROM TABLE2 AS T2

我得到结果:


ID      ITEMNAME
------  --------
MT-1    Pencil  
MT-2    (NULL)  
MT-3    (NULL)  

谁能帮帮我?

最佳答案

如果不规范化,你可以试试这个。但是这个查询不会是 SARGable,并且作为 ypercube pointed out在数据库中存储逗号分隔列表 is a bad idea .

  SELECT T2.ID,
         GROUP_CONCAT(T1.NAME SEPARATOR  ',')
   FROM TABLE2 AS T2
        INNER JOIN  TABLE2 AS T1
        ON FIND_IN_SET (T1.ID , T2.ITEM_ID )
   GROUP BY 
         T2.ID

关于mysql - 如何在子查询中使用 in 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082139/

相关文章:

php - “pdo_mysql” 已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

mysql - Ansible:从结果中获取值(value)

php - blueimp文件上传--将表单数据插入多个数据库表

php - 什么时候应该转义 MySQL 中使用的字符串

php - 使用 PDO::bindValue(带或不带类型标识符)与执行之间有什么区别吗?

mysql - 如何在mysql中将多个值分组为一个?

mysql - 如何在MariaDB中选择每个组中的最新成员?

php - 使困惑。 $_SESSIONS 之后有两个方括号?

java - UNSIGNED BIGINT 的 jOOQ 函数生成生成 LONG 而不是 ULONG

php - MYSQL事件更新另一个数据库表