2011-05-02 3 views
0

저는 SQL 프로그래밍에 익숙하지 않고 약간의 문제가 있습니다. 나는 다음과 MySQL의 스크립트가 : 나는 두 개의 ID를, Id1에와 ID2를 포함하는 기본 테이블을 가지고, 기본적으로조건부 NULL 열이있는 MySQL SELECT

SELECT 
    MyPrimaryTable.PrimaryKey, Alias1.String AS Output1, 
    CASE 
     WHEN Id2 IS NOT NULL THEN Alias2.String 
     ELSE "" 
    END AS Output2 
FROM MyPrimaryTable, MySecondaryTable AS Alias1, MySecondaryTable AS Alias2 
WHERE 
    MyPrimaryTable.Id1 = Alias1.Id1 
    AND ((MyPrimaryTable.Id2 IS NULL) OR (MyPrimaryTable.Id2 = Alias2.Id2)); 

을, 그리고 보조 테이블의 문자열이 ID의 각각을 연결하기 위해 노력하고있어 및 SELECT 결과에이. 자열을 표시하십시오. 그러나 기본 테이블의 두 번째 ID는 NULL이 될 수 있습니다. 이 경우 원하는 출력은 첫 번째 문자열이고 두 번째 문자열은 공백 ("")입니다. 내가 작성한 스크립트는 모든 행이 똑같아 보이더라도 가능한 모든 문자열에 대해 새 행을 추가한다는 점을 제외하면이 작업을 수행합니다.

가능한 문자열

예상 결과 FOO1, FOO2, Foo3 및 Foo4, 테이블에 두 개의 항목이 :

PK Output1 Output2 
1 Foo1 Foo4 
2 Foo2 

내가 무엇을 얻을 :이 정리 어떻게

1 Foo1 Foo4 
2 Foo2 
2 Foo2 
2 Foo2 

및 예상대로 작동합니까? 감사.

편집 : 나는 이것을 VIEW에서 사용하고 싶기 때문에 DISTINCT를 사용하지 않기를 바랬다. 그리고 DISTINCT는 뷰를 갱신 할 수 없도록 만들 것이다. 다른 쪽 끝

GROUP BY MyPrimaryTable.PrimaryKey 

로 그룹화

+0

당신이 GROUP_CONCAT을 생각 해 봤나 WHERE와 테이블을하지 참여할 수 있습니다? http://dev.mysql.com/doc/refman/5.0/ko/group-by-functions.html#function_group-concat –

답변

1

시도, 당신은) (

SELECT 
    MyPrimaryTable.PrimaryKey, 
    Alias1.String AS Output1, 
    CASE 
     WHEN Id2 IS NOT NULL THEN Alias2.String 
     ELSE "" 
    END AS Output2 
FROM MyPrimaryTable, 
    LEFT JOIN MySecondaryTable AS Alias1 ON MyPrimaryTable.Id1 = Alias1.Id1 
    LEFT JOIN MySecondaryTable AS Alias2 ON MyPrimaryTable.Id2 = Alias2.Id2 
+0

감사합니다! LEFT JOIN은 제가 찾고 있던 것입니다. – RawwrBag

+0

불행히도 이것은 VIEW에서 사용될 때 올바르게 업데이트되지 않는 것 같습니다. IE는 'UPDATE Output1 SET String = "test"WHERE PrimaryKey = 1234'를 시도하면 원본 문자열의 모든 인스턴스를 "test"로 바꾸는 것처럼 보입니다. PK의 위치는 1234입니다. 머리 꼭대기에서 이것이 왜 일어 났는지 알 수 있습니까? – RawwrBag

+0

신경 쓰지 마라, 그 마지막 코멘트를 무시해라, 나는 바보 다 - 나는 관련된 수법이 아니라 원래의 수를 편집해야 할 것이다. 더럽. – RawwrBag