Поиск отсутствующих данных или Сравнение целых строк

Я не уверен, как сформулировать заголовок, но я пытался написать запрос в течение последних 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 импортируются в БД и используются в качестве ссылки для обеспечения правильности добавления данных, которые были вручную добавлены в Таблицу B и Таблицу C. Таблица A не имеет отношения ни к одной другой таблице. Таблица B и таблица C имеют отношения «один-много» между собой (таблица B находится на «одной» стороне).

Теперь я пытаюсь написать запрос выбора, в котором будут перечислены все элементы из таблицы B, соединенные с таблицей C, где [Таблица B]. [Поле 2] = [Таблица A]. [Поле 1], но где [Таблица C] . [Поле 1] не совпадает с [Таблица A]. [Поле 2].

Результаты, которые я ожидаю (как и в приведенных выше данных):

  • Y, поскольку он не связан с E
  • Z, поскольку он связан с E вместо F

Это то, что я пробовал (между прочим):

 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] 

но это, очевидно, неверно, поскольку оно дает мне все возможные комбинации, где данные могут быть неправильными.

Я в недоумении, и я уверен, что это что-то простое, но я не вижу, где я ошибаюсь.

благодаря

Итак, 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 
Давайте будем гением компьютера.