2012-01-31 77 views
1

使用我有兩個表喜歡如下,如何子句中的子查詢

表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) 

誰能幫我請?

+0

'GROUP_CONCAT'? – knittl 2012-01-31 15:31:39

+1

在數據庫列中存儲逗號分隔值並不好。 – 2012-01-31 15:32:15

+0

@ knittl。在OP可以連接到Table1之前,OP需要在ITEM_ID上執行「GROUP_CONCAT」的反轉操作。 – 2012-01-31 15:33:34

回答

0

試試這個:

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

謝謝你的回覆johntotetwoo。得到了我要求的結果。 – 2012-01-31 15:51:13

+0

@SangeethaKrishnan歡迎您。 – 2012-01-31 15:52:55

0
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

謝謝你的回覆。得到了我要求的結果。 – 2012-01-31 15:50:47

1

沒有正常化,你可以試試這個。但是這個查詢不會是SARGable,並且ypercube pointed out在db 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 
+0

感謝你的回覆Conrad Frix。得到了我要求的結果。 – 2012-01-31 15:52:39

0

你正在尋找的是從項目列表獲取項目的名稱的遞歸的方式。

它需要在程序中使用腳本語言來完成.. SQL不支持獲取數據的方式等..

你需要加載一個字符串值的列表,然後將它們分割然後將它們替換爲它們在數據庫中的值。

+0

感謝法赫德哈馬德阿卜杜勒卡德。但我可以通過這個查詢 SELECT T2.ID得到我的結果, GROUP_CONCAT(T1.NAME分離器 '') 從表2可以爲T2 INNER JOIN TABLE1 AS T1 ON FIND_IN_SET(T1.ID,T2.ITEM_ID) GROUP BY T2.ID – 2012-02-02 06:58:48