MYSQL : 값이 두 번째 테이블에 있는지 여부에 따라 테이블에서 1 또는 0 쿼리 결과 가져 오기

Aarelovich

내 모든 사용자 목록을 가져 와서 특정 행 값이 16 인 경우 memo라는 이름의 다른 테이블에도 표시하고 싶습니다 (고유 식별자 기반). mp 테이블의 각 행에는 작업자와 메모가 있습니다. 작업자는 고유 한 사용자 ID입니다. 따라서 u.keyid = mp.worker이고 mp.memo = 16이면 사용자가 메모 (16)에 있습니다. 이것이 제가 작성한 쿼리입니다.

SELECT DISTINCT  
            u.name AS name,
            IF ((mp.worker = u.keyid AND mp.memo = 16),1,0) AS isin
        FROM users AS u, mp;

메모 16에 대한 mp.worker = u.keyid와 같은 mp 테이블에 항목이 있으면 isin은 1이어야합니다.

그러나이 쿼리는 모두 0 인 사용자의 전체 목록을 가져옵니다. 메모에 1 인 메모에 있던 모든 사용자 (다시)를 표시합니다. 사용자는 John, Michael, Sarah 및 Jane입니다. John과 Jane 만 회의에 참석했다고 가정하면 다음과 같은 결과가 나타납니다.

John       0
Micahel    0
Sarah      0
Jane       0
John       1
Jane       1

하지만 내가 원하는 것은 :

John       1
Micahel    0
Sarah      0
Jane       1

내가 원하는 것을 얻으려면 어떻게 작성해야합니까?

라파엘 오래된 집

귀하의 쿼리는 CROSS JOIN(직교 곱)을 수행하고 있습니다.

당신은 EXISTS절이 필요합니다 (이것은 또한으로 할 수 left join있지만 EXISTS더 명확 하다고 생각합니다 )

SELECT u.Name
       CASE WHEN EXISTS (Select null from mp
                         where mp.worker = u.keyid
                         and   mp.memo = 16)
            THEN 1 else 0 END
       AS isin
FROM users u

물론 (ANSI이지만 그렇지 않은 경우) IF대신 절을 사용할 수 있습니다.CASE... WHENIF

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관