Sql 查找丢失的数据或比较整行
我不知道如何用词来表达标题,但在过去的两天里,我一直试图写一个查询,这让我很沮丧。请参见下面我的表格结构:Sql 查找丢失的数据或比较整行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我不知道如何用词来表达标题,但在过去的两天里,我一直试图写一个查询,这让我很沮丧。请参见下面我的表格结构: ---------------------- | TABLE A | ---------------------- | FIELD 1 | FIELD 2 | ---------------------- | X | A | | X | B | | Y | C | | Y |
----------------------
| TABLE A |
----------------------
| FIELD 1 | FIELD 2 |
----------------------
| X | A |
| X | B |
| Y | C |
| Y | D |
| Y | E |
| Z | F |
---------------------
----------------------
| TABLE B |
----------------------
| PK FIELD | FIELD 2 |
----------------------
| 1 | X |
| 2 | Y |
| 3 | Z |
----------------------
1
|
|
|
*
------------------------
| TABLE C |
------------------------
| FK FIELD | FIELD 1 |
------------------------
| 1 | A |
| 1 | B |
| 2 | C |
| 2 | D |
| 3 | E |
------------------------
好的,基本上,表A的数据被导入数据库,并用作参考,以确保手动添加到表B和表C的数据是正确的。表A与任何其他表都没有关系。表B和表C之间存在一对多关系(表B位于“一”侧)
现在,我正在尝试编写一个select查询,它将列出表B中连接到表C的所有项目,其中[Table B].[Field 2]=[Table a].[Field 1],但其中[Table C].[Field 1]与[Table a].[Field 2]不同
我期望的结果(与上述数据一样)是:
- Y、 因为它没有链接到E
- Z、 因为它链接到E而不是F
选择[表B].[字段2],[表C].[字段1],[表A].[字段2]作为更正项
从[表B]内部联接
[Table B].[Field 2]=[Table C].[Field 1]内部联接上的[Table C]
[表B].[PK字段]=[表A].[FK字段]上的[表A]和
[表C].[字段1][表A].[字段2]
按[表B]排序[字段2]
但这显然是错误的,因为它给了我所有可能的组合,其中数据可能是错误的
我不知所措,我相信这很简单,但我看不出我错在哪里
谢谢所以,
表格A
是您应该拥有的,而表格C*--1表格B
是您应该拥有的
您拥有的内容可以转换为与TableA相同的格式,如下所示:
SELECT TableB.Field2 As Field1, TableB.Field1 As Field2
FROM TableB
JOIN TableC on TableB.FkField = TableC.PkField
现在您可以使用它从表A(您应该拥有的)中减去这些行(您拥有的)。剩下的是您应该拥有但没有的行:
SELECT Field1, Field2
FROM TableA
EXCEPT
SELECT TableB.Field2 As Field1, TableB.Field1 As Field2
FROM TableB
JOIN TableC on TableB.FkField = TableC.PkField
啊!完全忘记了except关键字。。。万分感谢!我会尝试一下,让你知道,但我相信它会成功的!
SELECT Field1, Field2
FROM TableA
EXCEPT
SELECT TableB.Field2 As Field1, TableB.Field1 As Field2
FROM TableB
JOIN TableC on TableB.FkField = TableC.PkField