在从原始SELECT语句中删除子查询时,我需要帮助。这有可能吗?我需要这样做来最终将这样的查询移到Denodo/VQL,它不允许SELECT语句中的子查询(但是允许CTE/WITH和子查询从/哪里)。
select case when material in (
select material
from schema.material_table
where old_material like '%55AD%'
) then 'Found'
else 'Not Found'
end
from schema.material_table;发布于 2021-11-24 02:01:18
我可以看到几个选择。最直接的翻译似乎是:
SELECT CASE
WHEN m2.MATERIAL IS NOT NULL THEN 'Found'
ELSE 'Not Found'
END AS IZZIT_THERE
FROM SCHEMA.MATERIAL_TABLE m2
RIGHT OUTER JOIN SCHEMA.MATERIAL_TABLE m1
ON m1.MATERIAL = m2.MATERIAL
WHERE m1.OLD_MATERIAL LIKE '%55AD%'但是RIGHT OUTER JOIN的使用可能是不熟悉的。为了切换到更熟悉的LEFT OUTER JOIN,我们需要反转查询中表的位置,并更改条件的显示方式:
SELECT CASE
WHEN m1.MATERIAL IS NOT NULL THEN 'Found'
ELSE 'Not Found'
END AS IZZIT_THERE
FROM SCHEMA.MATERIAL_TABLE m1
LEFT OUTER JOIN SCHEMA.MATERIAL_TABLE m2
ON m2.MATERIAL = m1.MATERIAL
WHERE m1.OLD_MATERIAL LIKE '%55AD%'我将别名保持不变,这样您就可以看到它们在查询中是如何移动的。在这两种查询中,m1都是主表,也就是说,它必须提供数据,而m2是次要或“可选”表--它可能有或可能没有匹配主表的数据。
就我个人而言,我更喜欢联接而不是子查询,因为我发现它们更容易理解,但是YMMV。
https://stackoverflow.com/questions/70089799
复制相似问题