繁体   English   中英

SQL Server中除外的替代

[英]Alternate of Except in SQL Server

我想从下表中获得结果。 获取除Id = 102的Apple之外的所有ID和treetype。

Id         TreeType 
---------------------
99         Apple
99         Mango   
102        Orange  
101        Blackberry   
102        Apple

结果将是。

Id         TreeType 
---------------------
99         Apple
99         Mango   
102        Orange  
101        Blackberry   

我们可以通过以下查询获得结果的一种方法。

select id, TreeType
from x

except

select id, TreeType
from x
where id = 102 and TreeType = 'Apple'

可以从一个select语句中获得结果吗?

我只是想避免,因为在实际情况下它对我来说变得非常昂贵。

怎么样

SELECT id,TreeType
FROM x
WHERE NOT(id = 102 AND TreeType = 'Apple')

虽然这确实让我感到WHERE (id <> 102 AND TreeType <> 'Apple') - 我想要认为WHERE (id <> 102 AND TreeType <> 'Apple')可以工作,但事实并非如此。 当你重新考虑它作为一个bools表时,这是有道理的 - 在这种情况下它就是

id    opr.    TreeType
======================
true  AND     false    -- 99 apple: false
true  AND     true     -- 99 mango: true
true  AND     false    -- 102 orange: false
true  AND     true     -- 101 blackberry: true
false AND     true     -- 102 apple: false

使用上面的语法,我们只得到我们想要定位的行为true并使用NOT

id    opr.    TreeType
======================
false AND     false     -- 99 apple: not(false) = true
false AND     false     -- 99 mango: not(false) = true
true  AND     false     -- 102 orange: not(false) = true
false AND     true      -- 101 blackberry: not(false) = true
true  AND     true      -- 102 apple: not(true) = false

另一个解决方案是使用NOT EXISTS这样的 -

SELECT id,TreeType
FROM x t
WHERE NOT EXISTS 
(
    SELECT 1 FROM x 
    WHERE 
        id = t.id AND TreeType = t.TreeType 
        AND id = 102 
        AND TreeType = 'Apple'
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM