복붙노트

[SQL] 쿼리를 제외하고 사용하는 경우 오류

SQL

쿼리를 제외하고 사용하는 경우 오류

이 쿼리는 작동합니다 :

mysql> SELECT s.sno FROM students s;  
+------+  
| sno  |   
+------+   
|    1 |   
|    2 |   
|    3 |   
|    4 |   
|    5 |    
|    6 |    
|    7 |   
|    8 |   
|    9 |   
|   10 |   
+------+   
10 rows in set (0.00 sec)  

이 쿼리는 또한 작동합니다 :

mysql> SELECT t.sno FROM take t WHERE t.cno = 'CS112';  
+------+  
| sno  |  
+------+  
|    1 |  
|    2 |  
|    3 |  
|    4 |  
+------+   
4 rows in set (0.00 sec)  

하지만이 쿼리 :

SELECT s.sno FROM students s    
EXCEPT    
SELECT t.sno FROM take t WHERE t.cno = 'CS112';  

오류와 함께 실패합니다 :

mysql> SELECT s.sno FROM students s  
    -> EXCEPT  
    -> SELECT t.sno FROM take t WHERE t.cno = 'CS112';  
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that   corresponds to your MySQL server version for the right syntax to use n   
ear 'EXCEPT   
SELECT t.sno FROM take t WHERE t.cno = 'CS112'' at line 2 

어떻게 내가 여기 잘못 한거야?

해결법

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

    1.나는 구문을 제외하고 MySQL의 지원을 믿지 않는다. 가입 NOT IN 또는 LEFT 사용해보십시오 :

    나는 구문을 제외하고 MySQL의 지원을 믿지 않는다. 가입 NOT IN 또는 LEFT 사용해보십시오 :

    SELECT s.sno 
    FROM students s    
    WHERE s.sno NOT IN 
    (
        SELECT t.sno 
        FROM take t 
        WHERE t.cno = 'CS112'
    );
    

    또는

    SELECT s.sno 
    FROM students s    
        LEFT JOIN take t ON s.sno = t.sno
    WHERE IFNULL(t.cno, '') != 'CS112'
    

    최신 정보

    나는 그런대로 데이터를 조롱하고 올바르게 5-10 반환합니다 :

    create temporary table temp_students (sno int)
    
    insert into temp_students values (1)
    insert into temp_students values (2)
    insert into temp_students values (3)
    insert into temp_students values (4)
    insert into temp_students values (5)
    insert into temp_students values (6)
    insert into temp_students values (7)
    insert into temp_students values (8)
    insert into temp_students values (9)
    insert into temp_students values (10)
    
    create temporary table temp_take (sno int, cno varchar(50))
    
    insert into temp_take values (1, 'CS112')
    insert into temp_take values (2, 'CS112')
    insert into temp_take values (3, 'CS112')
    insert into temp_take values (4, 'CS112')
    
    SELECT s.sno 
    FROM temp_students s    
            LEFT JOIN temp_take t ON s.sno = t.sno
    WHERE IFNULL(t.cno, '') != 'CS112'
    
  2. ==============================

    2.질문:

    질문:

    SQL 뿐인 예

    SELECT s.sno 
    FROM students s
    WHERE NOT EXISTS (SELECT 0 
                      FROM take t 
                      WHERE t.sno = s.sno 
                      AND t.cno = 'CS112') 
    
  3. ==============================

    3.이 시도.

    이 시도.

    SELECT s.sno FROM students s
    LEFT JOIN take t ON t.sno = s.sno AND t.cno = 'CS112' 
    WHERE t.sno IS NULL;
    

    http://www.sqlfiddle.com/#!2/a7430/7

  4. from https://stackoverflow.com/questions/16092353/error-when-using-except-in-a-query by cc-by-sa and MIT license