我正在尝试在Oracle 10.1.0.2.0中使用EXCEPT关键字,但不断收到错误"未知命令".我试过谷歌搜索,有人说关键字是MINUS,所以我使用MINUS,但我仍然有同样的错误.任何的想法?谢谢.
所以这是我的查询.我找到了参加所有课程编号> 500的学生的名字
SELECT s.name
FROM Students s
WHERE NOT EXISTS
(
SELECT c.id
FROM Courses c
WHERE c.number > 500
MINUS
SELECT e.course_id
FROM Enrollment e
WHERE e.student_id = s.id
);
Run Code Online (Sandbox Code Playgroud) 我有一个表格中的样本数据
Id Dsc
500001 INSURED
500001 THIRD PARTY
500001 THIRD PARTY
500001 THIRD PARTY
500002 INSURED
500002 THIRD PARTY
500003 INSURED
500004 BROKER
500005 CLAIMANT
Run Code Online (Sandbox Code Playgroud)
我希望提取那些Dsc既不是'保险'也不是'经纪人'的ID.由于两列都有重复数据,我设计了以下查询...
Select Id from table1 where Dsc not in ('Insured', 'Broker')
Except
Select Id from table1 where Dsc in ('Insured', 'Broker')
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以做到这一点?
我学习 SQL 已经几周了,刚刚完成了一个关于使用 IN 和 NOT IN 的家庭作业问题。我设法得到了正确的答案,但是,我使用了 EXCEPT 子句,但我们实际上还不允许使用该子句。据我所知,EXCEPT 和 NOT IN 在 SQL 中是非常相似的语句,但我不明白有什么区别。这是我的查询的一般格式:
SELECT *
FROM table
WHERE x IN (
SELECT x
/* ... some subquery*/
EXCEPT
SELECT x
/* ... some other subquery*/
)
Run Code Online (Sandbox Code Playgroud)
有没有办法重写这个通用查询而不使用 EXCEPT 语句?EXCEPT 和 NOT IN 一般有何不同?
编辑:另一篇文章似乎有一些很好的信息,但它似乎专注于 EXISTS 而不是 IN,它们有不同的目的,不是吗?
我在SQL中执行except和union语句时看到一种奇怪的行为。
我有两张桌子
Select * from #old
Run Code Online (Sandbox Code Playgroud)
数据看起来像这样
oid1 oid2 co
1 11 1
2 22 1
3 33 1
4 55 1
Select * from #new
nid1 nid2 co
1 11 3
2 22 1
3 33 1
4 44 1
4 55 1
Run Code Online (Sandbox Code Playgroud)
这是我最后的查询
Select * from #old
except
Select * from #new
union all
Select * from #new
except
Select * from #old
Run Code Online (Sandbox Code Playgroud)
并提供这些记录
oid1 oid2 co
1 11 3
4 44 1
Run Code Online (Sandbox Code Playgroud)
我的问题是..不应该在第一个except子句的另一行中:
Select * from #old …Run Code Online (Sandbox Code Playgroud) 我正在审核两个相同结构表中的值。T-SQLEXCEPT语句忽略一个表中某个值的尾随空格,因此这些值不匹配,但也不会出现在我们的审计中。
我尝试寻找改变 SQL 比较列的方式的方法。我做了类似的事情来确保它区分大小写,但找不到可以使其在字段值中包含空格/填充的东西。
示例数据的值为MyTable“产品名称”,而 的RemoteTable值为“产品名称”。
为了快速重现,这是我现在正在做的事情的精简版本:
DECLARE @SampleLocal TABLE(ProductName varchar(50))
DECLARE @RemoteTable TABLE(ProductName varchar(50))
INSERT INTO @SampleLocal (ProductName) VALUES ('Product Name')
INSERT INTO @RemoteTable (ProductName) VALUES ('Product Name ')
SELECT ProductName COLLATE SQL_Latin1_General_CP1_CS_AS ProductName
FROM @SampleLocal
EXCEPT
SELECT ProductName COLLATE SQL_Latin1_General_CP1_CS_AS ProductName
FROM @RemoteTable
Run Code Online (Sandbox Code Playgroud)
当前没有返回结果,表明值是相同的。但第二个表中的值末尾有一个空格。
我希望得到一个包含“产品名称”的结果
当我需要比较区分大小写的事物时,我可以添加
COLLATE SQL_Latin1_General_CP1_CS_AS
Run Code Online (Sandbox Code Playgroud)
是否有类似的东西会因为空格而显示不同的值?