使用SQLite

时间:2017-03-21 04:08:54

标签: sql sqlite union sql-except

我们说我有以下表格:

Table A             Table B
| a | b | c |       | a | b | c |
|---|---|---|       |---|---|---|
| a | b | c |       | a | b | c |
| a | c | d |       | a | c | d |
| c | d | e |       | a | b | c |
| f | g | h |       | o | p | q |
| a | a | a |       | a | b | c |

我希望找到与这两个表不同的所有行。

这给了我A中不在B中的行:

SELECT a, b, c FROM A
EXCEPT 
SELECT a, b, c FROM B;

| a | b | c |
|---|---|---|
| a | a | a |
| c | d | e |
| f | g | h |

这给了我B中不在A:

中的行
SELECT a, b, c FROM B
EXCEPT 
SELECT a, b, c FROM A;

| a | b | c |
|---|---|---|
| o | p | q |

所以要结合我尝试使用的两个

SELECT a, b, c FROM A
EXCEPT 
SELECT a, b, c FROM B
UNION
SELECT a, b, c FROM B
EXCEPT 
SELECT a, b, c FROM A;

但它仍然只给我B行。

如何从这两个表中获取行?

| a | b | c |
|---|---|---|
| a | a | a |
| c | d | e |
| f | g | h |
| o | p | q |

1 个答案:

答案 0 :(得分:2)

尝试将括号内的个人括起来,然后进行结合:

select * from (
    select a, b, c from a
    except 
    select a, b, c from b
)
union
select * from (
    select a, b, c from b
    except 
    select a, b, c from a
);