用于从其他表中查找数据的 SQL / Oracle SQL 代码

Posted

技术标签:

【中文标题】用于从其他表中查找数据的 SQL / Oracle SQL 代码【英文标题】:SQL / Oracle SQL Code for looking data from other tables 【发布时间】:2019-10-22 00:30:30 【问题描述】:

如何编写查询以从其他表中获取现有表中每一列的数据。

【问题讨论】:

SO 不是代码编写服务。当您遇到困难时,您应该尝试并发布问题。 我删除了冲突标签 sql-serveroracle。请仅添加相关的一项。 SQL JOIN and different types of JOINs的可能重复 我是 SQL 新手,我已尽力而为,但无法得到结果。因此我需要你们的帮助。 这里的大多数人都希望样本表数据和预期结果为格式化文本,而不是图像。 【参考方案1】:

你可以在system_codeleft join三次:

select
    d.id,
    s_cat.full_name cat_code_full_name,
    s_group.full_name group_code_full_name,
    s_other.full_name other_code_full_name
from data_table d 
left join system_code s_cat
    on s_cat.value = d.cat_code and s.code = 1
left join system_code s_group
    on s_group.value = d.group_code and s_group.code = 2
left join system_code s_other
    on s_other.value = d.other_code and s_other.code = 3

为避免重复连接,另一种解决方案是进行条件聚合:

select
    d.id,
    max(case when s.value = d.cat_code   and s.code = 1 then s.full_name end) cat_code_full_name,
    max(case when s.value = d.group_code and s.code = 2 then s.full_name end) group_code_full_name,
    max(case when s.value = d.other_code and s.code = 3 then s.full_name end) other_code_full_name
from data_table d 
left join system_code s on s.value in (d.cat_code, d.group_code, d.other_code)
gtoup by d.id

【讨论】:

与system_code表匹配的列太多了。所以我做了那么多时间左加入。还有其他方法吗? @Hemant:我用一个使用唯一左连接的解决方案更新了我的答案。 @GBM,非常感谢你,你是天才。高度赞赏。下次我确保在提出任何问题之前只添加相关标签并遵守规则。再次感谢您。 欢迎@Hemant!如果我的回答正确回答了您的问题,请点击绿色复选标志accept it...谢谢! 感谢您让我知道接受它。我从我的同事那里得到了另一种方法 SELECT d.id, ( SELECT s.full_name FROM system_code s WHERE s.system_code = 1 AND s.value = d.cat_code ) AS cat_code_full_name FROM data_table d【参考方案2】:

我想您在这里面临的问题是,如何获取所有 3 列的全名。方法1是三次加入SYSTEM_CODE表——

SELECT DT.ID
      ,SC1.FULL_NAME CAT_CODE_FULL_NAME
      ,SC2.FULL_NAME GROUP_CODE_FULL_NAME
      ,SC3.FULL_NAME OTHER_CODE_FULL_NAME
      ,DT.PRODUCT
FROM DATA_TABLE DT
JOIN SYSTEM_CODE SC1 ON SC1.VALUE = DT.CAT_CODE
JOIN SYSTEM_CODE SC2 ON SC2.VALUE = DT.CAT_CODE
JOIN SYSTEM_CODE SC3 ON SC3.VALUE = DT.CAT_CODE

【讨论】:

与system_code表匹配的列太多了。所以我做了那么多时间左加入。还有其他方法吗?

以上是关于用于从其他表中查找数据的 SQL / Oracle SQL 代码的主要内容,如果未能解决你的问题,请参考以下文章

从其他 sql 表中查找值

从 SQL 表中查找下一个工作日

Oracle的where子句

oracle

用于从多个表中查找具有表名的所有记录的 SQL 查询

Oracle PL/SQL - 由其他团队调用的用于插入数据的过程。正在从 Java 调用过程