2013-06-07 16 views
8

đây là truy vấn sqlite mà tôi phải thực hiện nhưng tôi muốn thực hiện ngoại trừ thao tác đầu tiên và sau đó là giao lộ. Theo mặc định, giao lộ được ưu tiên hơn ngoại trừ. Có cách nào tôi có thể thực hiện việc này không?truy vấn sqlite với giao nhau và ngoại trừ

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

Tôi đã thử đặt truy vấn trong dấu ngoặc vuông, nhưng nó đã ném cho tôi lỗi "[ near "(": syntax error ]".

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

thử điều này: (SELECT a, b FROM table1) INTERSECT ((SELECT a, b TỪ table2) TRỪ (SELECT a, b FROM table3)); – ikis

+0

@iKishore không có cách nào cũng không hoạt động. Tôi đang gặp một lỗi tương tự. – Shashank

Trả lời

15

truy vấn Compound không hỗ trợ dấu ngoặc đơn, nhưng subqueries làm:

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

Xin lưu ý rằng INTERSECT không không có ưu tiên cao hơn EXCEPT, các actual rules là:

Khi ba hoặc nhiều SELECT đơn giản được kết nối thành một SELECT hợp chất, chúng nhóm từ trái sang phải.

Kể từ INTERSECT là giao hoán, bạn chỉ có thể viết truy vấn đặc biệt này như:

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