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;
단, 인덱스에 따라 다릅니다.table2
2개의 조인(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 JOIN
MySQL은 다음과 같은 열을 구별할 수 없기 때문입니다.NULL
단, 조인된 테이블에 기존 레코드가 있으며 다음과 같이 생성된 컬럼이 있습니다.NULL
조인된 테이블에 일치하는 레코드가 없기 때문입니다.
두 열에 일치하는 항목이 없는 행만 반환하는 쿼리입니다.user_one
그리고.user_two
의table2
:
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
'programing' 카테고리의 다른 글
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo 실패:이름 또는 서비스를 알 수 없습니다. (0) | 2022.10.28 |
---|---|
MySQL: 여러 열의 MAX 또는 GREAST를 가져오지만 NULL 필드를 사용합니다. (0) | 2022.10.28 |
라라벨:일반적인 오류: 1615 준비된 스테이트먼트를 다시 준비해야 합니다. (0) | 2022.10.28 |
Mac OSX에서 JDK 7을 사용하는 방법 (0) | 2022.10.28 |
슈퍼 클래스 "javax.servlet.http"Java 빌드 경로에서 HttpServlet"을 찾을 수 없습니다. (0) | 2022.10.28 |