각각 행이있는 두 개의 테이블이있는 SQLite 데이터베이스가 id
있습니다. table2에 없는 것을 기반으로 table1의 데이터를 필터링하려고합니다 . 예를 들어 Table1은 다음과 같습니다.
In: SELECT id FROM table1 LIMIT 4
Out:
'0000001'
'0000002
'0000003'
'0000004'
그리고 table2에는 다음이 있습니다.
In: SELECT id FROM table2 LIMIT 10
Out:
None
None
None
'0001098'
'0001098'
'0001098'
'0001098'
'0001098'
'0001098'
'0001098'
id 열이 table2에없는 table1의 모든 값을 반환하고 싶습니다.
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2)
그러나 이것은 값을 반환하지 않습니다. 을 사용 SELECT id FROM table1 EXCEPT SELECT id FROM table2
하면 잘 작동합니다. 내가 이해로,은 WHERE COLUMN NOT IN
이다 표준 방법 내가 할 노력하고있어 수행하기는. 내가 도대체 뭘 잘못하고있는 겁니까?
그 이유는 id
in table2
에 null
값 이 포함되어 있기 때문입니다 .
이것을 사용하는 경우 :
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2 WHERE id IS NOT null)
작동합니다.
나는 아무것도 찾을 수 없습니다 SQLite는 이 경우에 대한 문서를하지만 대한 MySQL의 에서 : https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#function_in
SQL 표준을 준수하기 위해 IN은 왼쪽의 표현식이 NULL 인 경우뿐만 아니라 목록에 일치하는 항목이없고 목록의 표현식 중 하나가 NULL 인 경우에도 NULL을 반환합니다.
따라서 이것은 SQL 표준 이며 귀하의 경우 진술을 의미합니다.
IN (SELECT id FROM table2)
돌아온 NULL
다음
NOT IN (SELECT id FROM table2)
또한를 반환합니다 NULL
.
따라서 귀하의 상태는 평가되지 않으며 TRUE
결과를 얻지 못합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다