4

タイトルの言い方がよくわかりませんが、この 2 日間クエリを書こうとしていて、イライラしています。以下の私のテーブル構造を見てください:

----------------------
|      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 のデータは DB にインポートされ、テーブル B とテーブル C に手動で追加されたデータが正しいことを確認するための参照として使用されます。テーブル A には、他のテーブルとのリレーションシップはありません。テーブル B とテーブル C は、互いに 1 対多の関係にあります (テーブル B は「1」側にあります)。

[テーブル B].[フィールド 2] = [テーブル A].[フィールド 1] が [テーブル C] .[フィールド 1] は [テーブル A].[フィールド 2] と同じではありません。

私が期待している結果 (上記のデータと同様) は次のとおりです。

  • Y、E にリンクされていないため
  • Z、F ではなく E にリンクされているため

これは私が試したことです(とりわけ):

SELECT     [Table B].[Field 2], [Table C].[Field 1], [Table A].[Field 2] AS CorrectItem
FROM         [Table B] INNER JOIN
                      [Table C] ON [Table B].[Field 2] = [Table C].[Field 1] INNER JOIN
                      [Table A] ON [Table B].[PK Field] = [Table A].[FK Field] AND 
                      [Table C].[Field 1] <> [Table A].[Field 2]
ORDER BY [Table B].[Field 2]

しかし、データが間違っている可能性のあるすべての可能な組み合わせを私に与えているので、これは明らかに間違っています。

私は途方に暮れており、それは単純なことだと確信していますが、どこが間違っているのかわかりません。

ありがとう

4

1 に答える 1

2

だから、TableAあなたが持つべきものであり、あなたが持ってTableC *--1 TableBいるものです。

あなたが持っているものは、次のように TableA と同じ形式に変換できます。

SELECT TableB.Field2 As Field1, TableB.Field1 As Field2
FROM TableB
JOIN TableC on TableB.FkField = TableC.PkField

これを使用して、これらの行 (実際にあるもの) を TableA (あるべきもの) から差し引くことができます。残っているのは、持つべきであるが持っていない行です。

    SELECT Field1, Field2
    FROM TableA
EXCEPT
    SELECT TableB.Field2 As Field1, TableB.Field1 As Field2
    FROM TableB
    JOIN TableC on TableB.FkField = TableC.PkField
于 2013-09-20T16:35:01.657 に答える