优化2个不相关的table join

Optimization of 2 unrelated table join

我有一个界面,我将在其中显示来自 SQLite 数据库的项目列表,每个项目可以是以下两种类型之一:SubItem1 子项目 2。此数据库当前有三个 table:ItemsSubItem1SubItem2.

tableItems 包含列 SubItemIdType(0 - 子项目 1;2 - 子项目 2)

SubItem1SubItem2 有不同的列,但其中很多是相同的。

因此,为了填充此列表,我使用了如下查询:

select i.*, s1.name, s2.name, s1.time, s2.place
from ITEMS i
left outer join sub1 s1 on (i.type = 0 and i.sub_id = s1.id)
left outer join sub2 s2 on (i.type = 1 and i.sub_id = s2.id)

我以这些列为例,但我选择了每个子项的大约 10 列 table。

通过这个查询,我得到了很多冗余行。例如,当特定项目的类型为 SubItem1 时,我还将收到 table SubItem2

的空列

是否有更有效的查询方式?

谢谢。

对 "same" 列使用 COALESCE() :

select i.*, COALESCE(s1.name,s2.name) as name,
            COALESCE(s1.col1,s2.col2) as col2,
            ....
       s1.time, s2.place
from ITEMS i
left outer join sub1 s1 on (i.type = 0 and i.sub_id = s1.id)
left outer join sub2 s2 on (i.type = 1 and i.sub_id = s2.id)

您可以 select 两种类型分别使用内部联接,然后将两种结果与 compound query:

SELECT i.*, s.name, s.time, NULL AS place
FROM Items AS i
JOIN Sub1  AS s ON i.sub_id = s.id

UNION ALL

SELECT i.*, s.name, NULL,   s.place
FROM Items AS i
JOIN Sub2  AS s ON i.sub_id = s.id;

这些可能更有效。