У меня есть этот запрос, чтобы присоединиться к паре таблиц и получить различные значения, это выглядит примерно так:Получить Distinct из нескольких аналогичных таблиц
SELECT DISTINCT [TrackingCode]
,[Opponent]
,CONCAT([TrackingCode], ' | ', [Opponent]) AS RowName
,[MultiYrEvent]
,[Identifier]
FROM [BUDGET_FY2014].[dbo].[TrackingCodes]
INNER JOIN
(
SELECT *
FROM [BUDGET_FY2014].[dbo].[Transactions]
WHERE Report='2377010003'
) AS T
ON T.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'
ORDER BY TrackingCode ASC
Он работает отлично. Тем не менее, у меня есть несколько таблиц транзакций с той же схемой для первого и второго предыдущих лет относительно таблицы транзакций, и я хотел бы видеть разные значения из всех трех таблиц. Например, если я копирую/вставляю этот запрос и меняю [Transactions]
на [Transactions_Yr1]
или [Transactions_Yr2]
, тогда я получаю данные, которые хочу получить из этих таблиц. Но я хочу объединить три. Если я попытаюсь присоединиться к ним, я не получу никаких результатов. Я рода понять, почему это не работает, но я не знаю, куда идти отсюда:
SELECT DISTINCT [TrackingCode]
,[Opponent]
,CONCAT([TrackingCode], ' | ', [Opponent]) AS RowName
,[MultiYrEvent]
,[Identifier]
FROM [BUDGET_FY2014].[dbo].[TrackingCodes]
INNER JOIN
(
SELECT *
FROM [BUDGET_FY2014].[dbo].[Transactions]
WHERE Report='2377010003'
) AS T
ON T.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'
INNER JOIN
(
SELECT *
FROM [BUDGET_FY2014].[dbo].[Transactions_Yr1]
WHERE Report='2377010003'
) AS T1
ON T1.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'
INNER JOIN
(
SELECT *
FROM [BUDGET_FY2014].[dbo].[Transactions_Yr2]
WHERE Report='2377010003'
) AS T2
ON T2.EventCode LIKE CAST(TrackingCodes.TrackingCode AS nvarchar(20))+'%'
ORDER BY TrackingCode ASC
Любые советы будут оценены!
Это потому, что вы делаете ВНУТРЕННИЙ JOINS и есть коды событий отсутствуют в одной или нескольких таблиц? Попробуйте LEFT OUTER JOINs и посмотрите, что вы получаете. –
Внутреннее соединение (или объединение вообще) концептуально связано с объединением таблиц в горизонтальном направлении, обычно путем сопоставления общих значений внутри их строк. Союзы (именно то, что вы хотите) - это другой вид объединения, который работает в вертикальном направлении и просто складывает таблицы вместе (наряду с возможностью удаления повторяющихся строк). – shawnt00
@ shawnt00 спасибо за краткое объяснение – tarrball