是否可以除两个联合选择之外?

时间:2017-05-05 12:44:09

标签: sql sqlite

我有两个像这样的联合选择语句

SELECT value1 FROM table1 WHERE value2 = 'the'
UNION
SELECT value1 FROM table1 WHERE value2 = 'quick'

然后是另外两个联合的选择语句,比如这个

SELECT value1 FROM table1 WHERE value2 = 'brown'
UNION
SELECT value1 FROM table1 WHERE value2 = 'fox'

我想使用EXCEPT将这两个查询的结果组合在一起。这可能吗?我该怎么办?如果可能的话,我宁愿避免临时表或其他复杂情况。

我试过在两组之间坚持使用EXCEPT,但这显然不起作用。然后我尝试将每个组放在括号中,并在它们之间添加EXCEPT。

我知道这对某些人来说似乎很基本,但我不会做太多的SQL,所以对我来说并不那么明显。

如果它有任何区别,我会使用SQLite。

2 个答案:

答案 0 :(得分:1)

您希望从总体结果中删除最后两个查询的结果,因此您可以对它们使用EXCEPT;换句话说,(A + B) - (C + D)= A + B - C - D:

SELECT value1 FROM table1 WHERE value2 = 'the'
UNION
SELECT value1 FROM table1 WHERE value2 = 'quick'
EXCEPT
SELECT value1 FROM table1 WHERE value2 = 'brown'
EXCEPT
SELECT value1 FROM table1 WHERE value2 = 'fox'

答案 1 :(得分:0)

显然,这在SQLite中并不那么简单,这就是我遇到麻烦的原因。

而不是这样做......

(SELECT value1 FROM table1 WHERE value2 = 'the'
UNION
SELECT value1 FROM table1 WHERE value2 = 'quick')

EXCEPT

(SELECT value1 FROM table1 WHERE value2 = 'brown'
UNION
SELECT value1 FROM table1 WHERE value2 = 'fox')

Whick在SQL服务器和其他地方工作,你必须这样做......

SELECT * FROM 
(SELECT value1 FROM table1 WHERE value2 = 'the'
UNION
SELECT value1 FROM table1 WHERE value2 = 'quick')

EXCEPT

SELECT * FROM 
(SELECT value1 FROM table1 WHERE value2 = 'brown'
UNION
SELECT value1 FROM table1 WHERE value2 = 'fox')

感谢您Andriy M提供this answer。这说明括号在SQLite中的工作方式不同,并提供了一种解决方法。