2012-02-13 3 views
0

리턴 된 컬럼 중 하나로서 subselect를 사용할 수 있습니까?리턴 된 컬럼으로 서브 선택 사용

예를 들어 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

관련 문제