ACCESS / SQL - создание запроса, объединяющего все уникальные записи из нескольких таблиц - PullRequest
0 голосов
/ 14 декабря 2018

У меня три таблицы только с одним общим полем [Asset].

Одна таблица [tblAssets] содержит все поля, которые я хочу.

Однако я хотел бы проверить две другие таблицы и добавить любой [Актив], который не отображается в первой таблице.

Это должно привести к новой записи, содержащей только [Актив] и оставшиеся пустые поля.

Мой текущий код выглядит следующим образом:

SELECT *, "Assets" AS [Source]
FROM [tblAssets]
UNION SELECT "BOM", [Asset], NULL, NULL, NULL, NULL, NULL, NULL
FROM [tblBOM]
UNION SELECT "WO", [Asset], NULL, NULL, NULL, NULL, NULL, NULL
FROM [tblWO];

Это добавляетзаписей, как и ожидалось, но не удаляет дубликаты из-за того, что вся запись не является дубликатом.

Я подозреваю, что есть другие методы для решения этой проблемы, такие как запрос на добавление с определенными условиями.

Чтобы уточнить, я хочу получить полный список всех [Активов], которые появляются в нескольких источниках данных, но ТОЛЬКО в остальных полях, которые отображаются в таблице [Активы].

Пример данных:

tblAssets -

       Asset  Type  Unit  
         P1     2    1
         M1     1    2

tblBOM -

       Comp   Asset  Qty
         1      P1     1
         2      P2     2

tblWO -

         WO    Asset  Cost
         1      P1     100
         2      C1     200

Токовый выход

        Source  Asset  Type   Unit  
        Assets   P1     2       1    
        Assets   M1     1       2   
         BOM     P1                  
         BOM     P2                 
         WO      P1                
         WO      C1                   

Желаемый вывод

        Source  Asset  Type   Unit 
        Assets   P1     2       1    
        Assets   M1     1       2                 
         BOM     P2                               
         WO      C1                   

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018
  • Включите все из активов:
  • и только из tblBOM, не в активах и не в tblWO
  • , и все из tblWO, не в активах

.

SELECT "Assets" AS [Source], A.*
FROM [tblAssets] A
UNION SELECT "BOM", [Asset], NULL, NULL, NULL, NULL, NULL, NULL
FROM [tblBOM]
WHERE [Asset] not in (SELECT Asset FROM tblAssets)
  and [Asset] not in (SELECT ASSET FROM [tblWO])
UNION SELECT "WO", [Asset], NULL, NULL, NULL, NULL, NULL, NULL
FROM [tblWO]
WHERE [Asset] not in (SELECT Asset FROM tblAssets)
0 голосов
/ 14 декабря 2018

Выберите из таблиц tblBOM и tblWO все различные значения Asset, которых нет в таблице tblAssets:

SELECT "Assets" AS [Source], * FROM [tblAssets]
UNION 
SELECT "BOM" AS [Source], [Asset], NULL, NULL, NULL, NULL, NULL, NULL FROM [tblBOM]
WHERE [Asset] NOT IN (SELECT DISTINCT [Asset] FROM [tblAssets])
UNION 
SELECT "WO" AS [Source], [Asset], NULL, NULL, NULL, NULL, NULL, NULL FROM [tblWO]
WHERE [Asset] NOT IN (SELECT DISTINCT [Asset] FROM [tblAssets])
...