10

これは私が実行しなければならないsqliteクエリですが、最初に操作を除いて実行し、次に交差点を実行したいと考えています。デフォルトでは、交差は除外よりも優先されます。これを達成する方法はありますか?

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

クエリを括弧で囲んでみましたが、エラー " [ near "(": syntax error ]" がスローされました。

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

1 に答える 1

18

複合クエリは括弧をサポートしていませんが、サブクエリはサポートしています:

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

の優先順位は よりも高くINTERSECTないことに注意してくださいEXCEPT実際のルールは次のとおりです。

3 つ以上の単純な SELECT が複合 SELECT に接続されている場合、それらは左から右にグループ化されます。

は交換可能であるためINTERSECT、この特定のクエリを次のように単純に記述できます。

SELECT a, b FROM table2
EXCEPT
SELECT a, b FROM table3
INTERSECT
SELECT a, b FROM table1 
于 2013-06-07T07:48:17.627 に答える