Использование дополнительного выбора в качестве возвращаемого столбца - PullRequest
0 голосов
/ 14 февраля 2012

Можно ли использовать подвыбор в качестве одного из возвращаемых столбцов запроса?

Например, я использую MySql, и у меня есть таблица, содержащая список идентификаторов, связанных с некоторыми данными.Я хотел бы преобразовать идентификаторы, связанные с данным элементом данных из другой таблицы, в список 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 ....

Может кто-нибудь пролить свет на то, является ли это правильным способом сделать это, если есть лучший способили если это вообще возможно?

Заранее большое спасибо.

1 Ответ

2 голосов
/ 14 февраля 2012

Это еще проще в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...