복붙노트

[SQL] 쿼리 "NOT IN"MySQL은

SQL

쿼리 "NOT IN"MySQL은

나는 교장 열 값이 다른 테이블 (표 2)의 컬럼에 존재하지 않는 경우 표 1의 모든 행을 던져 간단한 쿼리를 실행하고 싶었다.

나는 사용하여 시도 :

SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal

이 대신 구문 오류를 던지고있다. 사람들이 MySQL을 사용하지 지원하고 뭔가 매우 복잡한 요구하지 않는다는 말을 한 경우 Google 검색 포럼에 나를 이끌었다. 이 사실인가요? 아니면 내가 끔찍한 실수를 무엇입니까?

해결법

  1. ==============================

    1.IN을 사용하려면, 세트가 대신이 구문을 사용해야합니다 :

    IN을 사용하려면, 세트가 대신이 구문을 사용해야합니다 :

    SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM table2)
    
  2. ==============================

    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. ==============================

    3.[…]

    […]

    […]

    […]

    (강조 추가)

  4. ==============================

    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. ==============================

    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)
    
  6. from https://stackoverflow.com/questions/1519272/mysql-not-in-query by cc-by-sa and MIT license