2012-02-13 5 views
0

返されたクエリの列の1つとして副選択を使用できますか?返された列としてサブ選択を使用

たとえば、私は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; 

しかし、問題は、私は別の範囲内にある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 .... 

誰もが、これはこれを行うには正しい方法であるかどうかにいくつかの光を当てることができ、またはもしそれが可能であれば?

事前に感謝します。

答えて

2

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 
+0

これはちょうど私が後になっているようです。以前にどうやってそれを見つけられなかったかわからない!やってみます。迅速な対応に感謝します。 – DBPaul

関連する問題