比左连接子查询更好的解决方案?

时间:2016-03-30 23:25:17

标签: oracle performance subquery left-join correlated-subquery

TablePatient.Patient_ID(PK)

TableProviders.Encounter (joins to PK)

TableProviders.Provider_Type

TableProviders.Provider_ID

TableNames.Full_Name

TableNames.Provider_ID (joins to Table Names)

我想要一个查询,为每个Patient_IDs提供Full_Name所有提供商的Provider ID

大约有30 provider_types

我已经使用左连接大量左连接。这需要很长时间才能运行,我在想有一个我不知道的伎俩。

任何帮助?

2 个答案:

答案 0 :(得分:0)

如果我理解您的意思,您只想将患者ID和提供者ID分组。提供者ID的全名是唯一的吗?

这应该是

SELECT TablePatient.Patient_ID,
TableProviders.Provider_ID,
TableNames.Full_Name


FROM TablePatient LEFT JOIN
TableProviders on TablePatient.Patient_ID = TableProviders.Encounter 
LEFT JOIN
TableNames on TableNames.Provider_ID = TablerProviders.Provider_ID

group by TablePatient.Patient_ID,
TableProviders.Provider_ID,
TableNames.Full_Name

您可以按TableNames.Full_Name进行分组,也可以选择First(TableNames.Full_Name),例如,如果提供商ID的全名确实是唯一的。

注意:我使用的是SQL服务器语法,Oracle可能存在差异。

答案 1 :(得分:0)

好的,我之前的回答根本不符合您的意思。您希望将每个Patient_ID上的每个Full_name轮换一个provider_typeTABLE_PATIENTWITH TABLE_PATIENT AS ( SELECT TablePatient.Patient_ID, TableProviders.Provider_Type, TableNames.Full_Name FROM TablePatient LEFT JOIN TableProviders on TablePatient.Patient_ID = TableProviders.Encounter LEFT JOIN TableNames on TableNames.Provider_ID = TableProviders.Provider_ID group by TablePatient.Patient_ID, TableProviders.Provider_Type, TableNames.Full_Name ) SELECT * FROM TABLE_PATIENT PIVOT ( min(Full_name) for Provider_type in ([type1], [type2],[type3]) ) AS PVT 。我假设每个患者只有一种类型的提供者,而不是更多;如果更多,每个病人都会有一行以上,无论如何我认为这不可能。

这是我使用pivot的解决方案。第一部分是为了使其更容易理解,因此我在子查询中创建了一个名为TABLE_PATIENT的表。

unit.l.func

所以function1 <- function(tvar, gam) { function(tvar, gam){ beta.G(tvar,gam) - 1/(1-deno[1])*(unit.l.func( tvar, gam)-1)*val[1]} } function2 <- function(tvar, gam) { function(tvar, gam){ beta.G(tvar,gam) - 1/(1-deno[2])*(unit.l.func( tvar, gam)-1)*val[2]} } 每个患者只有很多行,每行有一个提供者,而枢轴将所有内容放在一行上。告诉我一些事情是否有效。

您需要在[type1],[type2]等中编写所需的每种类型。只需将它们放在[]中,不需要其他字符作为'或其他任何字符。

如果只放置某些类型,则查询不会显示其他类型的提供者。

告诉我某些事情是否有效。