SQL隐式连接到显式连接

标签 sql database oracle join

我有一个简单的查询:

SELECT THDR.filename, 
       THDR.txn_header_id, 
       THDR.txn_header_ext_id, 
       THDR.txn_header_dttm, 
       THDR.upload_dttm, 
       Nvl(Sum(TDTL.txn_vol), 0) TOTAL_VOLUME, 
FROM   ci_txn_header THDR, 
       ci_txn_detail TDTL, 
WHERE  THDR.txn_header_id = TDTL.txn_header_id 

现在我面临的问题是,如果 ci_txn_header 中存在一条记录,而 TDTL 中不存在相应的记录,则此查询不会返回该记录。

有什么方法可以将其包含在我的结果中?我不想使用联合,因为我认为通过在查询中使用显式连接可以实现更好的效果。

请帮我解决这个问题到底需要哪个连接。

我正在使用 Oracle 数据库

最佳答案

使用LEFT JOIN

SELECT THDR.filename, 
       THDR.txn_header_id, 
       THDR.txn_header_ext_id, 
       THDR.txn_header_dttm, 
       THDR.upload_dttm, 
       Nvl(Sum(TDTL.txn_vol), 0) TOTAL_VOLUME, 
FROM   ci_txn_header THDR 
LEFT JOIN ci_txn_detail TDTL 
ON THDR.txn_header_id = TDTL.txn_header_id 

关于SQL隐式连接到显式连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15196250/

相关文章:

java - Hibernate JPA find() 和 merge() 之间删除的区别

database - 使用单独的数据库设置 Git 暂存和生产环境的最佳方法是什么?

c# - "Pop"记录 -- 在同一语句中选择和删除 (SQL Server 2005)

sql - 返回了重复的(ish)行。如何消除?

mysql - "out of range"是什么意思?

sql - 使用公用键用另一个表的数据更新一个表

sql - Oracle - 根据条件更新一列或另一列

database - PL/SQL模拟表单POST

c# - WPF 数据网格在 c# 中与远程/在线 mysql 绑定(bind)

javascript - 获取具有不同Where条件的报告