반응형
MySQL SELECT x from a where not in (b에서 x 선택) - 예기치 않은 결과
아래 세번째 쿼리의 결과는 id=732를 포함할 것으로 예상합니다.그렇지 않아요.왜 그런 것일까요?
mysql> ID Description 5에 의해 일치 순서에서 ID를 선택합니다;+------------+| id |+------------+| 732 || 730 || 655 || 458 || 456 |+------------+세트 5개 행(0.00초) mysql> ID Description 5에 의해 이메일 주문에서 ID를 선택합니다;+------------+| id |+------------+| 731 || 727 || 725 || 724 || 723 |+------------+세트 5개 행(0.00초) mysql>SELECT * From match where id not in (SELECT id from e-메일에서 SELECT id);빈 세트(0.00초)
email.id 테이블에는 3개의 NULL 항목이 있고 match.id 에는 NULL 항목이 없습니다.
전체 테이블/쿼리는 http://pastebin.ca/1462094 에서 볼 수 있습니다.
설명서에서:
준수하기 위해
SQL
표준.IN
돌아온다NULL
왼쪽 표현이 다음과 같은 경우에만 해당되는 것은 아닙니다.NULL
, 또한 목록에서 일치하는 것이 발견되지 않고 목록에서 표현 중 하나가 다음과 같은 경우에도NULL
.
이것이 바로 당신의 경우입니다.
둘다요.IN
그리고.NOT IN
돌아가다NULL
그것은 수용할 수 없는 조건입니다.WHERE
절
쿼리를 다음과 같이 다시 작성합니다.
SELECT *
FROM match m
WHERE NOT EXISTS
(
SELECT 1
FROM email e
WHERE e.id = m.id
)
... 아니면 정말로 사용하고 싶다면.NOT IN
사용가능
SELECT * FROM match WHERE id NOT IN ( SELECT id FROM email WHERE id IS NOT NULL)
MySQL에서 null을 어떻게 처리하는지에 대한 세부 사항은 잘 알지 못하지만, 다음 두 가지를 시도해 볼 수 있습니다.
SELECT * FROM match WHERE id NOT IN
( SELECT id FROM email WHERE id IS NOT NULL) ;
SELECT
m.*
FROM
match m
LEFT OUTER JOIN email e ON
m.id = e.id
AND e.id IS NOT NULL
WHERE
e.id IS NULL
두 번째 쿼리는 직관적이지 않아 보이지만 조인 조건과 where 조건을 수행합니다.이것은 조인과 절이 동등하지 않은 경우입니다.
다음은 실제로 의미가 있는 몇 가지 SQL입니다.
SELECT m.id FROM match m LEFT JOIN email e ON e.id = m.id WHERE e.id IS NULL
언제나 간단한 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/1001144/mysql-select-x-from-a-where-not-in-select-x-from-b-unexpected-result
반응형
'programing' 카테고리의 다른 글
"해시태그"를 사용하는 앱의 데이터베이스 설계 (0) | 2023.09.07 |
---|---|
Python의 목록에서 __str_에 대해 혼동함 (0) | 2023.09.07 |
소문자를 대문자로 변경하는 MySql 쿼리 (0) | 2023.09.07 |
페이지 온로드 시 자바스크립트 아약스 호출 (0) | 2023.09.07 |
.load()(성공 함수 포함) (0) | 2023.09.02 |