2009-11-12 8 views
0

02 테이블이 있습니다.테이블에 가입 하시겠습니까?

table1 

    id_user id_group 
    0  32 
    0  31 
    0  33 
    62  32 
    62  31 
    62  33 
    120  31 
    120  33 


table2 

    id parent_id name     

    31 18   AAA     
    32 18   BBB     
    33 18   CCC     

제가 특정 사용자 (id_user) 예컨대 사용자 jame위한

에서 사용자의 그룹을 얻고 싶은 (ID = 62) 실시 예는 사용자 jame의 출력

AAA | BBB | CCC 

(ID 것이다 = 120)가 출력됩니다

아무도 도와 줄 수 있습니까 사용자가 그룹에 속하게하려면 SQL 쿼리를 만들 수 있습니까? 덕분에 ! 당신은 외부가 필요합니다

+2

이 답변 의존 dB 될 것입니다 시도 할 수 있습니다, 당신은 어떤 데이터베이스를 사용하고 있습니까? –

+1

여러 행 또는 열이있는 단일 행을 원하십니까? 우리가 원하는 출력을 포맷하는 방법은 알아 내기가 어렵습니다. – jrista

+0

MYSQL 데이터베이스를 사용했습니다 – kn3l

답변

1

위에서 언급했듯이 행/열 또는 단일 입력란에이 값이 필요한지 확실하지 않으십니까?

그러나이

DECLARE @Table1 TABLE(
     id_user INT, 
     id_group INT 
) 

INSERT INTO @Table1 SELECT 0, 32 
INSERT INTO @Table1 SELECT 0, 31 
INSERT INTO @Table1 SELECT 0, 33 
INSERT INTO @Table1 SELECT 62, 32 
INSERT INTO @Table1 SELECT 62, 31 
INSERT INTO @Table1 SELECT 62, 33 
INSERT INTO @Table1 SELECT 120, 31 
INSERT INTO @Table1 SELECT 120, 33 

DECLARE @Table2 TABLE(
     id INT, 
     parent_id INT, 
     NAME VARCHAR(10) 
) 

INSERT INTO @Table2 SELECT 31, 18, 'AAA' 
INSERT INTO @Table2 SELECT 32, 18, 'BBB' 
INSERT INTO @Table2 SELECT 33, 18, 'CCC' 

DECLARE @user_id INT 

SELECT @user_id = 120 

DECLARE @RetVal VARCHAR(MAX) 

SELECT @RetVal = COALESCE(@RetVal + ' | ', '') + CASE WHEN sub.[NAME] IS NULL THEN 'None' ELSE sub.[NAME] END 
FROM @Table2 t2 LEFT JOIN 
     (
      SELECT * 
      FROM @Table1 t1 LEFT JOIN 
        @Table2 t2 ON t2.id = t1.id_group 
      WHERE t1.id_user = @user_id 
     ) sub ON t2.id = sub.id 

SELECT @RetVal 
+0

감사합니다! – kn3l

2

이 같은 사용자에게 그룹에서 조인

표 2에서 각 레코드에 대해
SELECT * 
FROM table2 LEFT JOIN table1 on table2.id = table1.id_group 
WHERE table1.id_user = <some id>. 

(사용자 그룹) 결과 집합의 레코드가있을 것입니다. 사용자가이 그룹에 있으면 table1 열이 설정되고 그렇지 않으면 NULL이됩니다.

SELECT CASE WHEN table1.id is null THEN 'None' ELSE table2.name END 
<and the rest of the code above> 

SQL에서 더 자연스러운 일이 될 것입니다, 당신은 예를 들어, 어떤 기능을해야 할 것이다 사용자가 그룹에없는있는 '없음'당신의 출력을 달성하기 위해 단지 출력 그룹의 이름은 사용자가 "정상"(내부)에 속한 가입 :

SELECT * 
FROM table2 JOIN table1 on table2.id = table1.id_group 
WHERE table1.id_user = <some id>. 

ID = 120 당신은 AAA와 CCC를 얻을 것하십시오. BBB에 대한 기록이 없다는 사실은 사용자가 BBB의 구성원이 아니라는 사실에 해당합니다.

+0

감사합니다. IRONGOOFY 더 명확하게하기 위해서. – kn3l

관련 문제