[SQL] MySQL은 SELECT는 NOT IN이 (SELECT가 B의 X) WHERE A로부터 X - 예기치 않은 결과를
SQLMySQL은 SELECT는 NOT IN이 (SELECT가 B의 X) WHERE A로부터 X - 예기치 않은 결과를
나는 아래의 세 번째 쿼리의 결과는 식 (732)을 포함 할 것으로 예상된다. 그것은하지 않습니다. 왜 그런 겁니까?
mysql> SELECT id FROM match ORDER BY id DESC LIMIT 5 ; +------------+ | id | +------------+ | 732 | | 730 | | 655 | | 458 | | 456 | +------------+ 5 rows in set (0.00 sec) mysql> SELECT id FROM email ORDER BY id DESC LIMIT 5 ; +------------+ | id | +------------+ | 731 | | 727 | | 725 | | 724 | | 723 | +------------+ 5 rows in set (0.00 sec) mysql> SELECT * FROM match WHERE id NOT IN ( SELECT id FROM email ) ; Empty set (0.00 sec)
세 개의 테이블 email.id에서 NULL 항목 및 match.id 없음 NULL의 항목이 있습니다.
전체 테이블 / 쿼리 http://pastebin.ca/1462094에서 볼 수있다
해결법
-
==============================
1.문서에서 :
문서에서 :
이것은 정확히 경우입니다.
WHERE 절에 대한 허용 조건없는 복귀 NULL 모두 IN과 NOT.
다음과 같이 쿼리를 다시 작성 :
SELECT * FROM match m WHERE NOT EXISTS ( SELECT 1 FROM email e WHERE e.id = m.id )
-
==============================
2.... 또는 당신은 정말 당신이 사용할 수 있지 사용하려는 경우
... 또는 당신은 정말 당신이 사용할 수 있지 사용하려는 경우
SELECT * FROM match WHERE id NOT IN ( SELECT id FROM email WHERE id IS NOT NULL)
-
==============================
3.내가 널 얼마나 MySQL의 거래의 세부 사항과 연락을 밖으로 조금 해요,하지만 여기에 시도하는 두 가지이다 :
내가 널 얼마나 MySQL의 거래의 세부 사항과 연락을 밖으로 조금 해요,하지만 여기에 시도하는 두 가지이다 :
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 조건을 두 번째 쿼리 외모는 직관적 인 카운터,하지만이 조인 조건을 수행합니다. 이 경우입니다 조인 어디 절은 해당되지 않습니다.
-
==============================
4.여기에 실제로 의미가 일부 SQL은 다음과 같습니다
여기에 실제로 의미가 일부 SQL은 다음과 같습니다
SELECT m.id FROM match m LEFT JOIN email e ON e.id = m.id WHERE e.id IS NULL
간단한 항상 낫다.
from https://stackoverflow.com/questions/1001144/mysql-select-x-from-a-where-not-in-select-x-from-b-unexpected-result by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] VARCHAR를 값을 변환 할 때 변환 int 데이터 형식 '단순한'를 실패한 (0) | 2020.06.06 |
---|---|
[SQL] "수"버전으로 SQL 정렬, 다양한 길이의 문자열 (0) | 2020.06.06 |
[SQL] SQLite는 외국인 키 제약 조건을 활성화 (0) | 2020.06.06 |
[SQL] 문자열 PHP에서 두 문자 사이의 문자열을 추출 (0) | 2020.06.06 |
[SQL] SQL은 - 어떻게 소수점 이하 숫자 만받을 수 있나요? (0) | 2020.06.06 |