一个sql需求。

gang9527999 2010-10-21 12:25:17
首先说明一下这两个表的关系,P_FREIGHT_SPEC 表中的数据在P_PUBLIC_POLICY里都有对应数据,相反则不一定。
现在我要按条件查询出两表都有的数据或者只有一个表(p_public_polciy)中含有的数据。

为什么这个sql不能满足?谁能提供以下思路/代码?
select *
from P_PUBLIC_POLICY left join P_FREIGHT_SPEC F
on P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
AND P_PUBLIC_POLICY.UNITCODE = F.UNITCODE
AND P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
AND P_PUBLIC_POLICY.APPLYENDORSENO = F.APPLYENDORSENO
AND 3 > 2
AND P_PUBLIC_POLICY.APPLYNO = 'AHANHNE44207P000001X'
and p_public_policy.unitcode='3010100'
AND F.NUMBERPLATE='车牌'
...全文
119 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
westneverwin 2010-10-21
  • 打赏
  • 举报
回复
select *
from P_PUBLIC_POLICY left join P_FREIGHT_SPEC F
on P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
AND P_PUBLIC_POLICY.UNITCODE = F.UNITCODE
AND P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
AND P_PUBLIC_POLICY.APPLYENDORSENO = F.APPLYENDORSENO
AND F.NUMBERPLATE='车牌'
WHERE
3 > 2
AND P_PUBLIC_POLICY.APPLYNO = 'AHANHNE44207P000001X'
and p_public_policy.unitcode='3010100'
Diza1986 2010-10-21
  • 打赏
  • 举报
回复
问题在于你把连接条件和检索条件混淆了

select *
from P_PUBLIC_POLICY left join P_FREIGHT_SPEC F
on P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
AND P_PUBLIC_POLICY.UNITCODE = F.UNITCODE
AND P_PUBLIC_POLICY.APPLYNO = F.APPLYNO
AND P_PUBLIC_POLICY.APPLYENDORSENO = F.APPLYENDORSENO
AND F.NUMBERPLATE='车牌' -- 这一句是连接条件还是检索条件,你考虑清楚
where -- 与P_FREIGHT_SPEC F无关的条件别写在连接条件里
3 > 2 -- 你这有什么用
AND P_PUBLIC_POLICY.APPLYNO = 'AHANHNE44207P000001X'
and p_public_policy.unitcode='3010100'
gelyon 2010-10-21
  • 打赏
  • 举报
回复

通过关联字段,采用外连接方式可以实现的,看看你是不是连接没写对
gang9527999 2010-10-21
  • 打赏
  • 举报
回复
例如说表A和表B
A 表中的数据在B里都有对应数据存在,
但是B表里的数据在A表里不一定有对应的数据存在。
如:
A表结构:id name unitcode applyno
1 张三 111 adf
2 李四 222 wer
B表 id score object applyno
1 80 4 adf


现在我要按条件查询出:
同一个sql只是检索条件的值不同。能单独查出张三信息 ,单独查询出李四信息的sql 。
注意一下条件:
当unitcode为‘111’时 则把object当做一个查询条件。
(说明一下unitcode为111 这B表里一定有表A对应的数据。
unitcode不为‘111’表B中则没有与表A对应的数据)
gelyon 2010-10-21
  • 打赏
  • 举报
回复

--把你的表结构和相应的需求都说清楚!

select a.*,b.* from
(select * from P_PUBLIC_POLICY WHERE APPLYNO = 'AHANHNE44207P000001X' and unitcode='3010100') a
left join
(select * from P_FREIGHT_SPEC where NUMBERPLATE='车牌')b
ON a.APPLYNO = b.APPLYNO
AND a.UNITCODE = b.UNITCODE
AND a.APPLYNO = b.APPLYNO
AND a.APPLYENDORSENO = b.APPLYENDORSENO
;
Diza1986 2010-10-21
  • 打赏
  • 举报
回复
你先把逻辑搞明白吧
没法理解你的需求
gang9527999 2010-10-21
  • 打赏
  • 举报
回复
看了各位的回复,
2# 我试了只能查出两表都有的数据。
6# 也是一样。
再补充两句:
F.NUMBERPLATE='车牌' 只有两种情况才用到这个检索条件
就是unitcode=‘13070900’和unitcode=‘13072800’
再帮忙看下!
gang9527999 2010-10-21
  • 打赏
  • 举报
回复
感谢各位!!!
HTE123 2010-10-21
  • 打赏
  • 举报
回复

select * from
(select *
from P_PUBLIC_POLICY t where t.unitcode='3010100'and t.APPLYNO = 'AHANHNE44207P000001X' ) aa
left join(select * from P_FREIGHT_SPEC F where F.NUMBERPLATE='车牌' ) bb
on aa.APPLYNO = bb.APPLYNO
AND aa.UNITCODE =bb.UNITCODE
AND aa.APPLYNO =bb.APPLYNO
AND aa.APPLYENDORSENO = bb.APPLYENDORSENO
AND 3 > 2------???后面这个是什么条件???
前面那样写估计就没问题
狂龙骄子 2010-10-21
  • 打赏
  • 举报
回复
请参考 3楼 的~~
gelyon 2010-10-21
  • 打赏
  • 举报
回复
你直接select * from p_public_polciy;不就行了吗???

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧