mysql - 使用子选择作为返回列

标签 mysql sql select

是否可以使用子选择作为查询的返回列之一?

例如,我正在使用 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/

相关文章:

mysql - 检索 Laravel 模型查询匹配的条件

mysql - 有没有办法将一行作为参数传递给 MySQL 函数?

mysql - 如何在不重启 MYSQL 服务器的情况下启用 --general-log?

mysql - 使用 "in"慢速连接和子查询的 SQL 嵌套集查询

php - 嵌套查询无法正确获取数据

sql - Oracle sqlplus 注释

php - CakePHP 表单选择值作为 table.id,选择选项文本作为 table.textfield

php - 这是Mysql外键的工作吗?

mysql - mysql 查询 : couple of conditions matching in the same column

javascript - 如何在不知道其 ID 的情况下从 JavaScript 中选择 HTML 元素?