Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite版本控制。是否可以使用EXCEPT来显示只有一列更改的行之间的差异?_Sqlite - Fatal编程技术网

SQLite版本控制。是否可以使用EXCEPT来显示只有一列更改的行之间的差异?

SQLite版本控制。是否可以使用EXCEPT来显示只有一列更改的行之间的差异?,sqlite,Sqlite,我对SQLite非常陌生,我试图使用EXCEPT语句来比较两个数据非常相似的表。数据来自我每天下载的CSV文件,在文件中添加和删除新行,旧行可以每天更改一列或多列。当我无法预测哪一列的数据将发生变化时,我试图找到一种方法来选择发生了列数据变化的行 比如说我有: TABLE contracts: |ID|Description|Name|Contract Type| |1 |Plumbing |Bob |Paper | |2 |Cooking |Ryan|Paper

我对SQLite非常陌生,我试图使用EXCEPT语句来比较两个数据非常相似的表。数据来自我每天下载的CSV文件,在文件中添加和删除新行,旧行可以每天更改一列或多列。当我无法预测哪一列的数据将发生变化时,我试图找到一种方法来选择发生了列数据变化的行

比如说我有:

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       |