SQLite版本控制。是否可以使用EXCEPT来显示只有一列更改的行之间的差异?
我对SQLite非常陌生,我试图使用EXCEPT语句来比较两个数据非常相似的表。数据来自我每天下载的CSV文件,在文件中添加和删除新行,旧行可以每天更改一列或多列。当我无法预测哪一列的数据将发生变化时,我试图找到一种方法来选择发生了列数据变化的行 比如说我有:SQLite版本控制。是否可以使用EXCEPT来显示只有一列更改的行之间的差异?,sqlite,Sqlite,我对SQLite非常陌生,我试图使用EXCEPT语句来比较两个数据非常相似的表。数据来自我每天下载的CSV文件,在文件中添加和删除新行,旧行可以每天更改一列或多列。当我无法预测哪一列的数据将发生变化时,我试图找到一种方法来选择发生了列数据变化的行 比如说我有: TABLE contracts: |ID|Description|Name|Contract Type| |1 |Plumbing |Bob |Paper | |2 |Cooking |Ryan|Paper
TABLE contracts:
|ID|Description|Name|Contract Type|
|1 |Plumbing |Bob |Paper |
|2 |Cooking |Ryan|Paper |
|3 |Driving |Eric|Paper |
|4 |Dancing |Emma|Paper |
以及:
我想把它退回:
|1 |Hiking |Bob |Paper |
|4 |Dancing |Emma|Digital |
因为合同1更改了说明,合同4更改了合同类型
在SQLite中可以这样做吗?一种方法是将
更新的\u合同
连接到合同
,其中匹配的行被过滤掉:
select uc.*
from updated_contracts uc left join contracts c
using(id, Description, Name, `Contract Type`)
where c.id is null
EXCEPT
也可以这样使用:
select * from updated_contracts
except
select * from contracts
仅当表具有相同的列数时,这才有效,其优点是它比较列中的null
值,如果它们都null
,则返回true
请参阅。结果:
| ID | Description | Name | Contract Type |
| --- | ----------- | ---- | ------------- |
| 1 | Hiking | Bob | Paper |
| 4 | Dancing | Emma | Digital |
| ID | Description | Name | Contract Type |
| --- | ----------- | ---- | ------------- |
| 1 | Hiking | Bob | Paper |
| 4 | Dancing | Emma | Digital |