Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
Sql 查找丢失的数据或比较整行_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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