2013-02-23 44 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