我有两个表,如下,
表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 :(得分: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
答案 1 :(得分: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;
答案 2 :(得分: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
答案 3 :(得分:0)
您正在寻找的是一种从项目列表中获取项目名称的递归方式。
需要在程序中使用脚本语言来完成。 sql不支持这种获取数据的方式..
您需要在字符串中加载值列表然后拆分它们,然后用它们在数据库中的值替换它们。