2013-06-07 17 views
8

tutaj kwerendy sqlite, które muszę wykonać, ale chcę wykonać oprócz operacji najpierw, a następnie przecięcia. Domyślnie przecięcie ma wyższy priorytet niż wyjątek. Czy jest sposób, w jaki mogę to osiągnąć?kwerenda sqlite z przecinają się i oprócz

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

Próbowałem umieszczenie zapytania w nawiasie, ale rzucił mi błąd „[ near "(": syntax error ]”.

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

spróbuj tego: (SELECT a, b FROM Tabela1) przecinają ((SELECT a, b OD Table2) OPRÓCZ (SELECT a, b Z tabeli3)); – ikis

+0

@iKishore nie, to też nie działa. Otrzymuję ten sam błąd. – Shashank

Odpowiedz

15

zapytania złożone nie obsługują nawiasy, ale podzapytania zrobić:

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

Uwaga INTERSECT robi nie mają wyższy priorytet niż EXCEPT The actual rules są:

Kiedy trzy lub więcej prostych SELEKTÓW jest połączonych w składankę WYBIERZ, grupują się od lewej do prawej.

Od INTERSECT jest przemienne, można po prostu napisać to konkretne zapytanie:

SELECT a, b FROM table2 
EXCEPT 
SELECT a, b FROM table3 
INTERSECT 
SELECT a, b FROM table1 
Powiązane problemy