SQL类似的子查询,where子句略有不同

时间:2017-10-25 09:16:10

标签: sql oracle

是否有更优化的方法来优化包含多个子查询的查询,这些子查询都选择相同的属性。

类似于以下内容:

     Await message.Server.CreateRole(name:="Role", permissions:=Nothing, color:=color.default, isHoisted:=False, isMentionable:=False)

3 个答案:

答案 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语法更强大。