首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子查询中如何使用in子句

子查询中如何使用in子句
EN

Stack Overflow用户
提问于 2012-01-31 15:28:12
回答 4查看 302关注 0票数 1

我有两张桌子如下所示

Table1:

代码语言:javascript
运行
复制
ID      NAME    
------  --------
IM-1    Pencil  
IM-2    Pen     
IM-3    NoteBook
IM-4    Eraser  

表-2:

代码语言:javascript
运行
复制
ID      ITEM_ID       
------  --------------
MT-1    IM-1          
MT-2    IM-1,IM-2,IM-3     
MT-3    IM-1,IM-2,IM-4

必需的结果是:

代码语言:javascript
运行
复制
ID      ITEMNAME
------  --------
MT-1    Pencil  
MT-2    Pencil,Pen,NoteBook  
MT-3    Pencil,Pen,Eraser  

但是通过使用查询

代码语言:javascript
运行
复制
SELECT T2.ID, 
          (SELECT T1.NAME 
           FROM TABLE1 AS T1 
           WHERE T1.ID IN (T2.ITEM_ID)) AS ITEMNAME 
    FROM TABLE2 AS T2

我得到了结果:

代码语言:javascript
运行
复制
ID      ITEMNAME
------  --------
MT-1    Pencil  
MT-2    (NULL)  
MT-3    (NULL)  

有人能帮我吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-31 15:44:08

试试这个:

代码语言:javascript
运行
复制
SELECT   b.ID, 
         GROUP_CONCAT(a.Name) as ItemName
FROM     Table2 b INNER JOIN Table1 a
              ON FIND_IN_SET(a.name, b.Item_ID)
GROUP BY b.ID
票数 0
EN

Stack Overflow用户

发布于 2012-01-31 15:42:13

如果没有正常化,你可以试试这个。但是这个查询不是SARGable,而是ypercube pointed out在db is a bad idea中存储逗号分隔的列表。

代码语言:javascript
运行
复制
  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
票数 1
EN

Stack Overflow用户

发布于 2012-01-31 15:34:05

代码语言:javascript
运行
复制
SELECT T2.ID, T1.NAME as ITEMNAME 
FROM TABLE2 AS T2 LEFT JOIN TABLE1 AS T1 ON 
     FIND_IN_SET(T1.ID,T2.ITEM_ID)>0 AND FIND_IN_SET(T1.ID,T2.ITEM_ID) IS NOT null;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9082139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档