2010-01-31 2 views
1
내가 같은 테이블에서 두 개의 열를 검색 할

하지만 현재 행의 특정 열이 설정되지 않은 경우에만. 검색 할 단 하나의 열만 있으면 아무런 문제가 없습니다. 일단 다른 컬럼이 필요하면, 다른 case-clause과 함께 또 다른 하위 쿼리가 필요할 것으로 보이지만, 이는 실제로 비효율적 인 것처럼 보입니다. 이전에 조인을 사용 해 본 적이 없지만 케이스 절과 실제로 복잡하다고 생각합니다.MySQL의 행 부질 케이스 (여러 열) (하지의 경우 절)

나는 그것이 필요한 경우 실제로는 (들었을 때) 낭비적인 하위 쿼리 만 실행한다는 것이 었습니다.

문서에서 나는 ROW()을 사용한 비교가 가능하다는 것을 발견했습니다. AS으로 열을 검색 할 수있는 동일한 항목이 있습니까?

아무리 조심해 주셔서 감사합니다. 조인스와 만 작동하는 경우, 올바른 방향으로 밀어 넣으십시오. 복잡하게 보이기 때문에 케이스 조항을 사용하면 앞으로 나아갈 경우 엉망이 될 수 있습니다.

루벤은

SELECT id, bekannt, (

CASE WHEN bekannt = '' 
    THEN (
     SELECT bekannt 
     FROM vokabeln AS v2 
     WHERE v2.id = vokabeln.hinweis 
     LIMIT 1 
    ) 
    ELSE NULL 
    END 
) AS lueckentext, (

CASE WHEN bekannt = '' 
    THEN (
     SELECT hinweis 
     FROM vokabeln AS v2 
     WHERE v2.id = vokabeln.hinweis 
     LIMIT 1 
    ) 
    ELSE NULL 
    END 
) AS lthinweis 
FROM vokabeln 
WHERE nutzer = 'test' 

답변

1

나는로 코드 것 :

SELECT 
    v1.id, v1.bekannt, v2.bekannt AS lueckentext, v2.hinweis AS lthinweis 
    FROM 
    vokabeln AS v1 
    LEFT OUTER JOIN vokabeln AS v2 
    ON (v1.bekannt='' AND v2.id = v1.hinweis) 
    WHERE 
    v1.nutzer='test' 
+0

는 lot__을 __Thanks이 내가 예상대로 복잡 보이지 않는다. 조인이 조건부 일 수 있다는 것을 알지 못했습니다. 언젠가 나 스스로 제대로 할거야. – Ruben

+0

네,'JOIN' 절의'ON' 하위 절은 부울 표현식이 될 수 있습니다 (그리고'OUTER' 조인은'SELECT' 목록의 두 번째 테이블 필드 대신'NULL's를 넣습니다. 첫 번째 표에서 두 번째 표의 행은 '켜짐'조건을 충족하지 않습니다. –

+0

어떻게 든 _default_ 테이블을 가정으로 지정할 수있어서'v1.id'를 지정할 필요는 없지만'id'는 모호하지 않게'v1.id'로 결정됩니다 (여전히'v2.something' 만 지정되어 있습니다).)? – Ruben