SQLDataReader中的括号

3
我有一个使用SQLLite的数据库,并且我正在使用C#。我进行查询并且它可以工作,但是当查询中包含( )时,就会失败并收到关于SQL语法的异常。
我创建了一个函数,帮助我使用SQLiteDataReader进行查询。
    public SQLiteDataReader SQLExecuteReader(string sqlStatement, SQLiteConnection sqliteConnection)
    {
        SQLiteCommand command = new SQLiteCommand(sqlStatement, sqliteConnection);
        return command.ExecuteReader();
    }

我是这样使用它的:

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

它失败了。

我错过了什么,为什么在查询中使用( )时会失败?


它是如何失败的?错误?错误的结果? - CL.
异常提示无效的SQL语法。 - Ricardo Polo Jaramillo
1个回答

4

尝试执行此查询:

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

A和b被称为别名。从UNION中删除ALL并再次执行。ALL将结果中的重复项保留下来,因此通过删除它,记录现在变得唯一。 - John Woo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接