首页 > 解决方案 > 使用 where 条件的 SQL 子查询

问题描述

SELECT
    RE.RECODE,
    (SELECT
        X.HIDESC
    FROM
            (
            SELECT HI.HIDESC, ROW_NUMBER() OVER(PARTITION BY HI.HIRECO ORDER BY HI.HIRECO) AS RN
            FROM M6HI HI WHERE HI.HIRECO = RE.RECODE
            ) X
    WHERE X.RN = 1) AS NILAI
FROM M5RE RE

对不起,我的英语不好。

我想根据 HI.HIRECO = RE.RECODE 从 M6HI 获取 HIDESC,而 RE.RECODE 是来自 M5RE 的循环。

谁知道怎么修它?

标签: sqlhiveql

解决方案


公用表表达式可以帮助您将其分解一下。

WITH cte_hidesc AS (
 SELECT HI.HIDESC, ROW_NUMBER() OVER(PARTITION BY HI.HIRECO ORDER BY HI.HIRECO) AS RN
 FROM M6HI HI INNER JOIN M5RE RE ON HI.HIRECO = RE.RECODE
)

SELECT HIDESC
FROM cte_hidesc
WHERE ROWNUMBER = 1

HiveQL 支持 CTE。文档在这里:
https ://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression


推荐阅读