是否有更优化的方法来优化包含多个子查询的查询,这些子查询都选择相同的属性。
类似于以下内容:
Await message.Server.CreateRole(name:="Role", permissions:=Nothing, color:=color.default, isHoisted:=False, isMentionable:=False)
答案 0 :(得分:1)
你为什么要用同一张表制作一个join
。如果我纠正你,你需要像
SELECT column1, column3
FROM server_data
WHERE column2 IN ('System Model',
'Machine Serial Number',
'Host Name',
'Mode')
答案 1 :(得分:0)
在查询顶部使用with语句/ cte,它选择Server_data中的所有数据,其中column2在4个值之一中,然后在select中使用可爱别名4次。这应该可以提高性能。另外,取决于选择性,在column2上创建索引
With dat as
( select * from server_data where column2 in (...,...,...,...)
)
Select * from dat Dat_sysmodel, dat dat_mode
where dat_Sysmodel.column2 = 'System Model'
And Dat_mode.column2 = 'Mode'
And Dat_sysmodel.id = dat_mode.id (+)
抱歉,我在iPad上很难完全输入
答案 2 :(得分:0)
假设每个column1
最多只有一个匹配,我会使用条件聚合:
select column1,
max(case when column2 = 'System Model' then column3 end) as system_model,
max(case when column2 = 'Machine Serial Number' then column3 end) as machine_serial_number,
max(case when column2 = 'Host Name' then column3 end) as host_name,
max(case when column2 = 'Mode' then column3 end) as mode
from server_data
group by column1;
我发现逻辑更容易理解。此外,这不使用不推荐使用的连接语法。一条建议:停止在FROM
子句中使用逗号。正确,明确,标准JOIN
语法更强大。