【发布时间】:2019-06-18 17:20:47
【问题描述】:
SELECT DISTINCT lr.id,
lr.dept,
lr.name
Case When lr.id IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value1%') AND lr.id IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value2%') Then 1
Else 0
End As both_panels,
Case When lr.id IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value1%') AND lr.id NOT IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value2%') Then 1
Else 0
End As only_value1_panel,
FROM RESULTS lr
我已经简化了这一点,实际上我实际上需要更多的 Case When 语句,这是性能的噩梦,因为子查询每次都会执行。有没有更高效的方法来做到这一点?
我尝试在查询之前创建公用表表达式和临时表,但我这样做的方式(用 CTE 或临时表中的 SELECT 替换子查询语句)似乎没有产生任何性能差异,因为它每次仍在执行查询。
【问题讨论】:
标签: sql performance netezza