2013-02-23 40 views
2

我有一個使用SQLLite的數據庫,我使用的是C#。我做查詢和它的工作原理,但當查詢有()它失敗,並提供一個關於SQL語法的注意事項。sqldatareader中的小括號

我創建了一個功能,可以幫助我使用SQLiteDataReader

public SQLiteDataReader SQLExecuteReader(string sqlStatement, SQLiteConnection sqliteConnection) 
    { 
     SQLiteCommand command = new SQLiteCommand(sqlStatement, sqliteConnection); 
     return command.ExecuteReader(); 
    } 

的querys我使用這種方式:

SQLiteDataReader reader = SQLExecuteReader("--SQL QUERY--", sqliteConnection); 

在我來說,我使用查詢來比較兩個表相同的結構。 當查詢是:

SELECT * FROM Table1 EXCEPT SELECT * FROM Table2 

它的工作原理。

但當查詢

( SELECT * FROM table1 
    EXCEPT 
    SELECT * FROM table2) 
UNION ALL 
( SELECT * FROM table2 
    EXCEPT 
    SELECT * FROM table1) 

或者

(SELECT * FROM Table1 EXCEPT SELECT * FROM Table2 

它失敗。

我在查詢中使用( )時錯過了什麼以及爲什麼失敗?

+0

它是如何失敗?錯誤?錯誤的結果? – 2013-02-23 21:50:59

+0

異常說無效的SQL語法 – 2013-02-24 02:45:50

回答

4

嘗試執行此查詢,

SELECT * 
FROM 
(
    SELECT * FROM Table1 
    EXCEPT 
    SELECT * FROM Table2 
) a 
UNION ALL 
SELECT * 
FROM 
(
    SELECT * FROM Table2 
    EXCEPT 
    SELECT * FROM Table1 
) b 
+0

什麼是「a」和「b」? – 2013-02-23 18:10:50

+0

它顯示了表格之間的差異,但是兩次 – 2013-02-23 18:17:06

+0

A和b被稱爲別名。從UNION中刪除ALL並重新執行。 ALL會保留結果副本,以便刪除它,記錄現在是唯一的。 – 2013-02-23 18:25:05