条件可选的两个表用OR连接起来查询,记录出现重复,求救...
订单表:
订单编号、目的国、运输方式、订单尾号
箱唛表:
编号、目的国、运输方式、订单尾号、箱唛规则【目的国+订单尾号、目的国+运输方式】
现在用一句SQL将订单表和箱唛表连接起来查询、难点在 箱唛表的条件可选;就是优先使用 目的国+订单尾号 去和订单表连接,如果没有记录再用 目的国+运输方式 去和订单表连接。
我现在是这样用的:
select * from 订单表 a
inner join 箱唛表 b on (a.目的国= b.目的国 and
a.订单尾号=b.订单尾号 and b.箱唛规则=【目的国+订单尾号】) or (a.目的国= b.目的国 and
a.运输方式=b.运输方式 and b.箱唛规则=【目的国+运输方式】)
现在记录出现重复,我希望他能满足了第一个条件 就不要再查第二个了。。。。。。。。。。。
------解决方案--------------------为什么不能用distinct
------解决方案--------------------这样写呢?
select * from 订单表 a
inner join 箱唛表 b on
(a.目的国= b.目的国 and a.订单尾号=b.订单尾号 and b.箱唛规则=【目的国+订单尾号】)
or
(a.目的国= b.目的国 and
a.订单尾号<>b.订单尾号 and a.运输方式=b.运输方式 and b.箱唛规则=【目的国+运输方式】)
------解决方案--------------------你一个订单有几个箱唛规则啊,如果一个订单只对应一个箱唛规则,那怎么会出现重复呢
有没有模拟数据,发来看看
------解决方案--------------------那么两种改法,简单该法是别抽箱唛规则字段,然后distinct去重复
复杂点的是对你抽出来的结果集以订单编号分组做rownumber over partition by,然后取rownumber为1的一条数据
------解决方案----------------------看你需求,是不能用 Or 的,这么写试试,union all 对应的字段不能用*,用啥你自己调节
with t as (
select * ,1 sort
from 订单表 a
inner join 箱唛表 b on (a.目的国= b.目的国 and a.订单尾号=b.订单尾号 and b.箱唛规则=【目的国+订单尾号】)
union all
select * ,2 sort
from 订单表 a
inner join 箱唛表 b on (a.目的国= b.目的国 and a.运输方式=b.运输方式 and b.箱唛规则=【目的国+运输方式】)
),tt as (
select *,rn=ROW_NUMBER(partition by a.订单编号 order by sort)
from t
)
select * from tt where tt.rn=1