我有一个简单的查询:
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/