我试图在我认为获得相同数据的两种选择之间进行选择。
我有一个包含感兴趣的 ID 的表,以及一组 4 个彼此相似的表,其中包含这些 ID 的数据。一旦获得每个 ID 的行,我将使用它们来获取最大状态字段或最小日期字段等(跨越 4 个表)。
我可以看到将此查询构造为 1 个连接到 4 个表的联合,或作为 4 个连接的联合。哪个更有效率?FWIW,我发现第一个更容易理解,并且可能更容易维护。
拼写出两个选择:
将 idTable 与 UNION 在一起的 4 个表的子选择结合起来:
select ss.id, ss.study, ss.status, ss.date
from ( -- subselect ss
select tx.id, tx.study, tx.status, tx.date
from table_tx tx
UNION
select cfu.id, cfu.study, cfu.status, cfu.date
from table_cfu cfu
UNION
select sfu.id, sfu.study, sfu.status, sfu.date
from table_sfu sfu
UNION
select bsl.id, bsl.study, bsl.status, bsl.date
from table_bsl bsl
) ss
inner join
idTable id on id.id = ss.id AND id.study = ss.study
idTable 的联合与四个中的每一个相结合:
select tx.id, tx.study, tx.status, tx.date
from table_tx tx
inner join
idTable id on id.id = tx.id AND id.study = tx.study
UNION
select cfu.id, cfu.study, cfu.status, cfu.date
from table_cfu cfu
inner join
idTable id on id.id = cfu.id AND id.study = cfu.study
UNION
select sfu.id, sfu.study, sfu.status, sfu.date
from table_sfu sfu
inner join
idTable id on id.id = sfu.id AND id.study = sfu.study
UNION
select bsl.id, bsl.study, bsl.status, bsl.date
from table_bsl bsl
inner join
idTable id on id.id = bsl.id AND id.study = bsl.study
或者除了这些还有更好的选择吗?