条件可选的两个表用OR连接起来查询,记录出现重复,求救...

xugang96 2014-05-07 02:50:44
订单表:
订单编号、目的国、运输方式、订单尾号

箱唛表:
编号、目的国、运输方式、订单尾号、箱唛规则【目的国+订单尾号、目的国+运输方式】


现在用一句SQL将订单表和箱唛表连接起来查询、难点在 箱唛表的条件可选;就是优先使用 目的国+订单尾号 去和订单表连接,如果没有记录再用 目的国+运输方式 去和订单表连接。

我现在是这样用的:
select * from 订单表 a
inner join 箱唛表 b on (a.目的国= b.目的国 and a.订单尾号=b.订单尾号 and b.箱唛规则=【目的国+订单尾号】) or (a.目的国= b.目的国 and a.运输方式=b.运输方式 and b.箱唛规则=【目的国+运输方式】)

现在记录出现重复,我希望他能满足了第一个条件 就不要再查第二个了。。。。。。。。。。。
...全文
344 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcqm8888 2016-02-28
  • 打赏
  • 举报
回复
思路:发现重复,去掉重复就完事了吧?
spiritofdragon 2014-05-07
  • 打赏
  • 举报
回复
--看你需求,是不能用 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
spiritofdragon 2014-05-07
  • 打赏
  • 举报
回复
当然也可能是你写法有问题
spiritofdragon 2014-05-07
  • 打赏
  • 举报
回复
跟关联条件OR 没有任何关系。 即使一个关联满足条件1也满足条件2,Or连接起来也只能关联出1条,不会关联出两条,关联不是Union all。 所以,你出现任何重复都只可能是,你的数据本身就有问题,关联结果有重复问题,绝对是你数据本身有问题。把你的数据贴出来看看吧。
xdashewan 2014-05-07
  • 打赏
  • 举报
回复
那么两种改法,简单该法是别抽箱唛规则字段,然后distinct去重复 复杂点的是对你抽出来的结果集以订单编号分组做rownumber over partition by,然后取rownumber为1的一条数据
xugang96 2014-05-07
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
你一个订单有几个箱唛规则啊,如果一个订单只对应一个箱唛规则,那怎么会出现重复呢 有没有模拟数据,发来看看
最多对应2个
xdashewan 2014-05-07
  • 打赏
  • 举报
回复
你一个订单有几个箱唛规则啊,如果一个订单只对应一个箱唛规则,那怎么会出现重复呢 有没有模拟数据,发来看看
xugang96 2014-05-07
  • 打赏
  • 举报
回复
引用 2 楼 sz_haitao 的回复:
这样写呢? 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.箱唛规则=【目的国+运输方式】)
没用,第二个条件时,订单尾号肯定不等
xugang96 2014-05-07
  • 打赏
  • 举报
回复
不是完全重复,是那个箱唛不一样,订单的其他字段一摸一样
haitao 2014-05-07
  • 打赏
  • 举报
回复
这样写呢? 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.箱唛规则=【目的国+运输方式】)
xdashewan 2014-05-07
  • 打赏
  • 举报
回复
为什么不能用distinct

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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