SQL三表内连接查询无结果问题排查(orders、stocks、status表)
SQL查询无结果的排查原因
1. 日期条件逻辑完全颠倒
你的where子句中日期范围判断完全写反了:
o.order_date <= date '2023-10-01' and o.order_date >= date '2023-10-30'
没有任何日期能同时满足"小于等于2023-10-01"且"大于等于2023-10-30",这是导致无结果的核心原因。正确写法应为:
o.order_date >= date '2023-10-01' and o.order_date <= date '2023-10-30'
或用between简化:
o.order_date between date '2023-10-01' and date '2023-10-30'
2. 输出字段不符合需求
你期望获取stocks表的keyuser、stock_loc字段,但当前查询的select子句仅包含s.keyuser, o.order_date,缺少stock_loc,修正后应改为:
select s.keyuser, s.stock_loc from ...
3. 内连接可能过滤掉匹配数据
使用inner join时,只有三张表都存在匹配关联数据的记录才会被返回。若存在以下情况,也会导致无结果:
stocks表中keyuser='kiki'的记录,无对应orders表数据(o.order_stock_id = s.stocks_id无匹配)- 匹配的
orders记录,无对应status表数据(sta.status_id = o.order_status_id无匹配) - 匹配的
orders记录的order_status_id不在(2,3,5)范围内
修正后的完整SQL
select s.keyuser, s.stock_loc from stocks s inner join orders o on o.order_stock_id = s.stocks_id inner join status sta on sta.status_id = o.order_status_id where o.order_date between date '2023-10-01' and date '2023-10-30' and s.keyuser = 'kiki' and sta.status_id in (2, 3, 5)
内容的提问来源于stack exchange,提问作者Haruya
相关产品推荐
相关产品推荐

