내 모든 사용자 목록을 가져 와서 특정 행 값이 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... WHEN
IF
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다