2013-06-07 5 views
8

Hier ist eine SQLite-Abfrage, die ich ausführen muss, aber ich möchte mit Ausnahme der Operation zuerst und dann Schnittpunkt durchführen. Standardmäßig hat die Schnittmenge Vorrang vor der Ausnahme. Gibt es eine Möglichkeit, dies zu erreichen?sqlite Abfrage mit Schnittpunkt und außer

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

Ich habe versucht, die Abfragen in Klammern setzen, aber es warf mir einen Fehler „[ near "(": syntax error ]“.

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

try this: (SELECT a, b FROM table1) INTERSECT ((SELECT a, b FROM table2) AUSSER (SELECT a, b aus Tabelle3)); – ikis

+0

@iKishore nein, das auch nicht funktioniert. Ich bekomme den gleichen Fehler. – Shashank

Antwort

15

Verbindung Abfragen unterstützen Klammern nicht, aber Subqueries tun:

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

Bitte beachten Sie, dass INTERSECT tut nicht haben eine höhere Priorität als EXCEPT, die actual rules sind:

Wenn Drei oder mehr einfache SELECTs sind in einer zusammengesetzten SELECT verbunden, sie gruppieren sich von links nach rechts.

Seit INTERSECT kommutativ ist, können Sie einfach schreiben diese Abfrage wie:

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