Oracle SQL 获取第三个表的参考

Posted

技术标签:

【中文标题】Oracle SQL 获取第三个表的参考【英文标题】:Oracle SQL Get Reference of third table 【发布时间】:2020-04-14 08:27:38 【问题描述】:

我有一个包含 3 个表的数据库:

PM_FLX_ENTE PM_ST PM_ANO_SP

我想获得PM_ANO_SP.L_ANO_SP 的某些PM_ANO_L.L_ANO 值,其中包含带有/ 的代码号。

SELECT COUNT(RF_INTRN),TRIM(pm_st.c_st),TRIM(pm_ano_l.L_ANO)
    FROM PM_FLX_ENTE
    INNER JOIN PM_ST ON PM_FLX_ENTE.C_ST = PM_ST.C_ST
    INNER JOIN PM_ANO_L ON PM_FLX_ENTE.C_ANO = pm_ano_l.c_ano
    WHERE pm_flx_ente.C_ANO <> '0000'
        AND pm_ano_l.c_lang = 'FR'
    group by TRIM(pm_st.c_st), TRIM(pm_ano_l.L_ANO)
ORDER BY COUNT(RF_INTRN) DESC

你能帮帮我吗

【问题讨论】:

【参考方案1】:

这有点矫枉过正,但如果它只是你的PM_ANO_SP 中的 ID,那么直接加入并使用你得到的东西是一种方法:

SELECT 
    COUNT(RF_INTRN),
    TRIM(NVL(PM_ANO_SP.L_ANO_SP, pm_st.c_st)), -- If found in PM_ANO_SP, use it
    TRIM(pm_ano_l.L_ANO)
FROM PM_FLX_ENTE
INNER JOIN PM_ST 
    ON PM_FLX_ENTE.C_ST = PM_ST.C_ST
INNER JOIN PM_ANO_L 
    ON PM_FLX_ENTE.C_ANO = PM_ANO_L.C_ANO
LEFT JOIN PM_ANO_SP 
    ON PM_ST.C_ST = PM_ANO_SP.C_ST -- < Don't know the name
WHERE 
    pm_flx_ente.C_ANO <> '0000'
    AND pm_ano_l.c_lang = 'FR'
GROUP BY TRIM(pm_st.c_st), TRIM(pm_ano_l.L_ANO)
ORDER BY COUNT(RF_INTRN) DESC

【讨论】:

我绝对愿意,非常感谢!【参考方案2】:

一种选择是在WHERE 子句中添加另一个条件:

and instr(PM_ANO_L.L_ANO, '/') > 0

【讨论】:

以上是关于Oracle SQL 获取第三个表的参考的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以获取 PostgreSQL 中第一个、第二个、第三个表的名称?

Sql 语句。获取指定表的列名

oracle 如何获取表的结构,就像mysql里的desc命令一样的功能,

我想写一个sql查询来获取soap xml中两个标签之间的数据,这些标签出现在oracle表的clob列中

oracle 如何获取表的主键列名,如何获取表的所有列名

CodeSmith无法获取Oracle表注释