[SQL] 쿼리 "NOT IN"MySQL은
SQL쿼리 "NOT IN"MySQL은
나는 교장 열 값이 다른 테이블 (표 2)의 컬럼에 존재하지 않는 경우 표 1의 모든 행을 던져 간단한 쿼리를 실행하고 싶었다.
나는 사용하여 시도 :
SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal
이 대신 구문 오류를 던지고있다. 사람들이 MySQL을 사용하지 지원하고 뭔가 매우 복잡한 요구하지 않는다는 말을 한 경우 Google 검색 포럼에 나를 이끌었다. 이 사실인가요? 아니면 내가 끔찍한 실수를 무엇입니까?
해결법
-
==============================
1.IN을 사용하려면, 세트가 대신이 구문을 사용해야합니다 :
IN을 사용하려면, 세트가 대신이 구문을 사용해야합니다 :
SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM table2)
-
==============================
2.하위 쿼리 옵션은 이미 대답했지만, 대부분의 경우에 LEFT JOIN을주의는이 작업을 수행하는 빠른 방법이 될 수 있습니다 :
하위 쿼리 옵션은 이미 대답했지만, 대부분의 경우에 LEFT JOIN을주의는이 작업을 수행하는 빠른 방법이 될 수 있습니다 :
SELECT table1.* FROM table1 LEFT JOIN table2 ON table2.principal=table1.principal WHERE table2.principal IS NULL
당신이 만드는 여러 테이블을 확인하려면 (SRKR의 코멘트처럼) 테이블의, 당신은이를 사용할 수 있습니다에서 확인이 존재하지입니다 :
SELECT table1.* FROM table1 LEFT JOIN table2 ON table2.name=table1.name LEFT JOIN table3 ON table3.name=table1.name WHERE table2.name IS NULL AND table3.name IS NULL
-
==============================
3.[…]
[…]
[…]
[…]
(강조 추가)
-
==============================
4.불행하게도, 서브 쿼리 옵션은 잘못된 결과를 반환 보여줍니다 아래 절에 "NOT IN"화면-촬영의 MySQL의 사용과 문제가 될 것 같다 :
불행하게도, 서브 쿼리 옵션은 잘못된 결과를 반환 보여줍니다 아래 절에 "NOT IN"화면-촬영의 MySQL의 사용과 문제가 될 것 같다 :
mysql> show variables like '%version%'; +-------------------------+------------------------------+ | Variable_name | Value | +-------------------------+------------------------------+ | innodb_version | 1.1.8 | | protocol_version | 10 | | slave_type_conversions | | | version | 5.5.21 | | version_comment | MySQL Community Server (GPL) | | version_compile_machine | x86_64 | | version_compile_os | Linux | +-------------------------+------------------------------+ 7 rows in set (0.07 sec) mysql> select count(*) from TABLE_A where TABLE_A.Pkey not in (select distinct TABLE_B.Fkey from TABLE_B ); +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.07 sec) mysql> select count(*) from TABLE_A left join TABLE_B on TABLE_A.Pkey = TABLE_B.Fkey where TABLE_B.Pkey is null; +----------+ | count(*) | +----------+ | 139 | +----------+ 1 row in set (0.06 sec) mysql> select count(*) from TABLE_A where NOT EXISTS (select * FROM TABLE_B WHERE TABLE_B.Fkey = TABLE_A.Pkey ); +----------+ | count(*) | +----------+ | 139 | +----------+ 1 row in set (0.06 sec) mysql>
-
==============================
5.주의 NOT IN는 <> ANY에 대한 별칭이 아니라 <> ALL이 될!
주의 NOT IN는 <> ANY에 대한 별칭이 아니라 <> ALL이 될!
http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html
SELECT c FROM t1 LEFT JOIN t2 USING (c) WHERE t2.c IS NULL
문이 안 열려 '로 대체
SELECT c FROM t1 WHERE c NOT IN (SELECT c FROM t2)
당신은 사용해야합니다
SELECT c FROM t1 WHERE c <> ANY (SELECT c FROM t2)
from https://stackoverflow.com/questions/1519272/mysql-not-in-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 날짜 + 시간과 날짜를 얻기 위해 SQL Server의 가장 효율적인 방법은? (0) | 2020.03.20 |
---|---|
[SQL] 다른 주문 BY와 PostgreSQL을 DISTINCT ON (0) | 2020.03.20 |
[SQL] 어떻게 MySQL을 순차적 번호 격차를 찾는 방법은? (0) | 2020.03.20 |
[SQL] SQL에서, 계수의 차이 (열) 무엇과 COUNT (*)? (0) | 2020.03.20 |
[SQL] .NET에서 Math.Max 같은 두 값을 사용합니다 SQL Server의 최대 기능이 있습니까? (0) | 2020.03.20 |