programing

MySQL 왼쪽 조인이 null인 행 선택

firstcheck 2022. 10. 28. 21:09
반응형

MySQL 왼쪽 조인이 null인 행 선택

MySQL 테이블은 다음과 같습니다.

표 1:

id | writer
1  | Bob   
2  | Marley
3  | Michael

표 2:

user_one | user_two
   1     | 2

그리고 이 질문은

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.user_one

이 쿼리는 table1의 모든 행(1, 2, 3)을 반환합니다.

왼쪽 조인트에 없는 행만 선택하고 싶습니다.따라서 ID를 가진 행만 반환해야 합니다.3

조인에서 찾을 수 있는 행만 선택하는 INSER JOIN과는 반대로 하고 싶습니다.왼쪽 조인(left join)이 존재하는 경우 등 반대되는 방법을 무시하고 다음 행으로 이동합니다.괜찮길 바래

다음 조회를 사용할 수 있습니다.

SELECT  table1.id 
FROM    table1 
        LEFT JOIN table2 
            ON table1.id IN (table2.user_one, table2.user_two)
WHERE   table2.user_one IS NULL;

단, 인덱스에 따라 다릅니다.table22개의 조인(join)이 더 나은 성능을 보일 수 있습니다.

SELECT  table1.id 
FROM    table1 
        LEFT JOIN table2 AS t1
            ON table1.id = t1.user_one
        LEFT JOIN table2 AS t2
            ON table1.id = t2.user_two
WHERE   t1.user_one IS NULL
AND     t2.user_two IS NULL;

열을 반환하지 않는 경우 가장 좋은 방법 중 하나table2를 사용하는 것입니다.

SELECT  table1.id 
FROM    table1 T1
WHERE
  NOT EXISTS (SELECT *
              FROM table2 T2
              WHERE T1.id = T2.user_one
                  OR T1.id = T2.user_two)

의미론적으로 이것은 문의할 내용을 나타냅니다.두 번째 테이블에서 일치하는 레코드가 없는 행을 모두 선택합니다.

MySQL은 다음과 같이 최적화되어 있습니다.EXISTS: 일치하는 첫 번째 레코드를 발견하면 바로 반환됩니다.

이에 대한 한 가지 주의사항:조인된 테이블의 nullable 컬럼과 대조할 때 필요에 따라서는NOT EXISTS(또는 사용 시 다른 열과 대조하여 확인)LEFT JOINMySQL은 다음과 같은 열을 구별할 수 없기 때문입니다.NULL단, 조인된 테이블에 기존 레코드가 있으며 다음과 같이 생성된 컬럼이 있습니다.NULL조인된 테이블에 일치하는 레코드가 없기 때문입니다.

두 열에 일치하는 항목이 없는 행만 반환하는 쿼리입니다.user_one그리고.user_twotable2:

SELECT T1.*
FROM table1 T1
LEFT OUTER JOIN table2 T2A ON T2A.user_one = T1.id
LEFT OUTER JOIN table2 T2B ON T2B.user_two = T1.id
WHERE T2A.user_one IS NULL
    AND T2B.user_two IS NULL

각 컬럼에 1개의 조인트가 있습니다(user_one그리고.user_two쿼리에서는 일치하는 조인트가 없는 행만 반환됩니다.

이게 도움이 되길 바라.

SELECT table1.id 
FROM table1 
LEFT JOIN table2 ON table1.id = table2.user_one
WHERE table2.user_one is NULL

다음 쿼리를 시도합니다.-

 SELECT table1.id 
 FROM table1 
 where table1.id 
 NOT IN (SELECT user_one
         FROM Table2
             UNION
         SELECT user_two
         FROM Table2)

도움이 되시길 바랍니다.

시험:

SELECT A.id FROM
(
  SELECT table1.id FROM table1 
  LEFT JOIN table2 ON table1.id = table2.user_one
  WHERE table2.user_one IS NULL
) A
JOIN (
  SELECT table1.id FROM table1 
  LEFT JOIN table2 ON table1.id = table2.user_two
  WHERE table2.user_two IS NULL
) B
ON A.id = B.id

참조

아니면 두 개가 필요할 수도 있고LEFT JOINS다음과 같은 별칭을 사용합니다.

SELECT table1.id FROM table1 
 LEFT JOIN table2 A ON table1.id = A.user_one
 LEFT JOIN table2 B ON table1.id = B.user_two
 WHERE A.user_one IS NULL
 AND B.user_two IS NULL

참조

언급URL : https://stackoverflow.com/questions/25890534/mysql-select-rows-where-left-join-is-null

반응형