我有两个像这样的联合选择语句
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。
答案 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中的工作方式不同,并提供了一种解决方法。