SQL-сервер, использующий «USE» с INNER JOINS и «UNION» вместе - PullRequest
0 голосов
/ 11 января 2019

Я видел много документации по UNION и INNER JOIN в одном запросе, но я не могу найти документацию по этому конкретному случаю.

Вот пример того, что я пытаюсь сделать, но этот синтаксис недопустим:

USE DB1
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM ResourceTable
INNER JOIN CustomerTable ON ResourceTable.CID = CustomerTable.CID
UNION ALL
USE DB2
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM ResourceTable
INNER JOIN CustomerTable ON ResourceTable.CID = CustomerTable.CID
ORDER BY ResourceTable.ID

Таким образом, в принципе, есть две базы данных, которые имеют одинаковую схему, но разные данные. Мне нужно выполнить запрос INNER JOIN для них обоих, и я предположил, что это может работать, это UNION.

Это будет работать, за исключением строки 6, где я пытаюсь сослаться на другую базу данных. Мне интересно, есть ли способ заставить это работать, и я просто неправильно понимаю синтаксис.

Один из вариантов - вставить оба в таблицу ##temp и затем запросить временную таблицу, но я бы хотел этого избежать, если это возможно.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Вы можете ссылаться на базы данных напрямую:

SELECT DISTINCT ResourceTable.ID, CustomerTable.FN 
FROM DB1..ResourceTable 
INNER JOIN DB1..CustomerTable ON ResourceTable.CID = CustomerTable.CID 
UNION ALL 
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN 
FROM DB2..ResourceTable 
INNER JOIN DB2..CustomerTable ON ResourceTable.CID = CustomerTable.CID
ORDER BY ResourceTable.ID

Обратите внимание, что вы должны заменить .. на имя вашей схемы, например .dbo..

0 голосов
/ 11 января 2019

Очень просто. Попробуйте код ниже:

SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM DB1.dbo.ResourceTable AS ResourceTable 
INNER JOIN DB1.dbo.CustomerTable AS CustomerTable 
ON ResourceTable.CID = CustomerTable.CID
UNION ALL
SELECT DISTINCT ResourceTable.ID, CustomerTable.FN
FROM DB2.DBO.ResourceTable AS ResourceTable 
INNER JOIN DB2.DBO.CustomerTable AS CustomerTable 
ON ResourceTable.CID = CustomerTable.CID
ORDER BY ResourceTable.ID;

Это с учетом того, что вы используете схему по умолчанию "dbo", если таблицы находятся в другой схеме, просто замените dbo любой схемой.

Этот способ очень полезен для архивирования данных между разными БД, сравнения данных или любого другого объединения таблиц в разных БД.

...