具有相交和除外的sqlite查询

标签 sqlite

这是我必须执行的 sqlite 查询,但我想先执行 except 操作,然后执行交集。默认情况下,intersection 的优先级高于 except。有什么办法可以做到这一点吗?

select a, b from table1 intersect select a,b from table2 except  select a, b from table3

我尝试将查询放在方括号中,但它向我抛出错误“[ near “(”:语法错误 ]

select a, b from table1 intersect (select a,b from table2 except  select a, b from table3)

最佳答案

复合查询不支持括号,但子查询支持:

SELECT a, b FROM table1
INTERSECT
SELECT * FROM (SELECT a, b FROM table2
               EXCEPT
               SELECT a, b FROM table3)

请注意INTERSECT 的优先级高于EXCEPTactual rules是:

When three or more simple SELECTs are connected into a compound SELECT, they group from left to right.

因为 INTERSECT 是可交换的,你可以简单地将这个特定的查询写成:

SELECT a, b FROM table2
EXCEPT
SELECT a, b FROM table3
INTERSECT
SELECT a, b FROM table1 

关于具有相交和除外的sqlite查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978128/

相关文章:

python - 我的 Python SQLite 代码是否容易受到 SQL 注入(inject)?

android - sqlite3 : not found

android - SQLite 计数(列)GROUP BY 问题

android - 在 SQLite 中查询时是否可以将值从列拆分为行?

entity-framework - iOS 上使用 Entity Framework Core 和 Xamarin Forms 的 PlatformNotSupportedException

.net - 在 (.NET 4.0 C#) Sync Framework 4.0 CTP 中将 "0"/"1"解析为 bool

java - 安卓 SQlite : Insert data into multiple tables with sharing ids

c# - Unity3D 删除 MonoDevelop 中的项目引用

iphone - 加载到CoreData

node.js - JSON SQlite3 使用 JSON 创建表