Syntax error when using except in a query(在查询中使用 except 时出现语法错误)
                            本文介绍了在查询中使用 except 时出现语法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
此查询有效:
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 
我在这里做错了什么?
推荐答案
我不相信 MySQL 支持 EXCEPT 语法.尝试使用 NOT IN 或 LEFT JOIN:
I don't believe MySQL supports EXCEPT syntax.  Try using NOT IN or a LEFT JOIN:
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:
I mocked up your data as such and it correctly returns 5 through 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'
                        这篇关于在查询中使用 except 时出现语法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:在查询中使用 except 时出现语法错误
				
        
 
            
        
             猜你喜欢
        
	     - 导入具有可变标题的 Excel 文件 2021-01-01
 - 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
 - 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
 - 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
 - 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
 - SQL 临时表问题 2022-01-01
 - 在SQL中,如何为每个组选择前2行 2021-01-01
 - 更改自动增量起始编号? 2021-01-01
 - 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
 - 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
 
						
						
						
						
						
				
				
				
				