是否可以使用子选择作为查询的返回列之一?
例如,我正在使用 MySql,并且我有一个表,其中包含与某些数据关联的 ID 列表。我想将另一个表中与给定数据项关联的 ID 转换为逗号分隔的 VarChar 列表。我知道我可以使用以下内容来做到这一点:
DECLARE pr_StudentId INT; -- An input parameter
DECLARE @Classes VARCHAR(4096);
SELECT @Classes = COALESCE(@Classes + ',', '') + ClassTable.ClassId
FROM ClassTable, StudentTable
WHERE ClassTable.Id = StudentTable.Id
AND StudentTable.Id = p_StudentId;
但是,问题是我需要在另一个 SELECT 中返回该数据以及来自(例如)StudentTable(位于存储过程中)的其他数据。到目前为止我已经有了这个,但我不太确定如何让它工作:
SELECT
StudentTable.Id,
StudentTable.Name,
(
SELECT @Classes
FROM
(
SELECT @Classes = COALESCE(@Classes + ',','') + ClassTable.ClassId
FROM ClassTable, StudentTable
WHERE ClassTable.Id = StudentTable.Id
)
) AS ClassList,
...
FROM StudentTable ....
WHERE ....
任何人都可以阐明这是否是正确的方法,是否有更好的方法,或者是否可能?
提前非常感谢。
最佳答案
在 MySQL 中甚至更容易。查看GROUP_CONCAT功能。
SELECT st.Id, st.Name, GROUP_CONCAT(ct.ClassId) AS ClassList
FROM StudentTable st
INNER JOIN ClassTable ct
ON st.Id = ct.Id
GROUP BY st.Id, st.Name
关于mysql - 使用子选择作为返回列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267719/