将使用 Inner Join 的查询嵌套到更大的查询中

问题描述 投票:0回答:1

我正在尝试将一些数据附加到现有查询中,但附加数据使用内部联接才能正常工作。我正在努力嵌套它而不丢失更大查询中的结果。

原始查询是由许多表构建的,因此需要:

select
    T1.key1,
    T1.data1,
    T1.data2,
    T1.data3,
    T2.key1,
    T2.data1,
    T2.data2,
    T2.data3
    ...
from Table1 T1
JOIN Table2 ON T1.key1=T2Key1
JOIN
...

WHERE (criteria).

然后出现第二个表,我尝试使用以下命令获取特定操作发生的最新日期:

select
    NewTable.Key1,
    NewTable.Data1,
    NewTable.Data2,
    NewTable.Data3,
    NewTable.Data4,
    NewTable.Data5,
    Table1.Data2,
    Table2.Data3
FROM tablename1 NewTable
INNER JOIN
(
    select Data1, MAX(date) AS DateTime
    FROM tablename1
    WHERE (criteria)
    GROUP BY Key1
) AS NewTable2 ON (NewTable.Key1 = NewTable2.Key1) AND (NewTable.Data1 = NewTable2.Data1)
LEFT JOIN Table 1...
LEFT JOIN Table 2...;

现在我想将此表作为第一个表中数据收集的一部分。我不需要 Table1 和 Table2 数据,因为它们是开始时表的一部分,但我正在努力包含第二个表而不丢失数据。

考虑到需要内部联接,并且不能影响以前的数据,合并这些附加数据的最佳方法是什么?本质上,我需要第一个查询中的所有数据,无论第二个查询产生什么,但第二个查询需要受到限制才能产生正确的结果?

到目前为止,我正在使用 Power Bi 合并两个结果表,但想知道是否有更有效的 wat。

sql sql-server inner-join
1个回答
0
投票

您可以合并两个结果集,

select
    T1.key1,
    T1.data1,
    T1.data2,
    T1.data3,
    T2.key1,
    T2.data1,
    T2.data2,
    T2.data3
    ...
from Table1 T1
JOIN Table2 ON T1.key1=T2Key1
JOIN
...

WHERE (criteria)

Union all

select
    NewTable.Key1,
    NewTable.Data1,
    NewTable.Data2,
    NewTable.Data3,
    NewTable.Data4,
    NewTable.Data5,
    Table1.Data2,
    Table2.Data3
FROM tablename1 NewTable
INNER JOIN
(
    select Data1, MAX(date) AS DateTime
    FROM tablename1
    WHERE (criteria)
    GROUP BY Key1
) AS NewTable2 ON (NewTable.Key1 = NewTable2.Key1) AND (NewTable.Data1 = NewTable2.Data1)
LEFT JOIN Table 1...
LEFT JOIN Table 2...;
© www.soinside.com 2019 - 2024. All rights reserved.