订单表:
订单编号、目的国、运输方式、订单尾号
箱唛表:
编号、目的国、运输方式、订单尾号、箱唛规则【目的国+订单尾号、目的国+运输方式】
现在想用一句SQL将订单表和箱唛表连接起来查询、难点在 箱唛表的条件可选;就是优先使用 目的国+订单尾号 去和订单表连接,如果没有记录再用 目的国+运输方式 去和订单表连接。
这种能一句话搞定吗?
------解决方案--------------------
select *
from 订单表 a
inner join 箱唛表 b
on (a.目的国= b.目的国 and a.订单尾号=b.订单尾号) or
(a.目的国= b.目的国 and a.运输方式=b.运输方式)
------解决方案--------------------
SELECT
*
FROM
订单表 a
WHERE
EXISTS ( SELECT
1
FROM
箱唛表
WHERE
目的国=a.目的国 AND (a.订单尾号=a.订单尾号 OR 运输方式=a.运输方式) )
------解决方案--------------------
优先级可以用ISNULL()来实现,但是具体看你的“没有”是什么意思
------解决方案--------------------
SELECT
*
FROM
订单表 a
WHERE
EXISTS ( SELECT
1
FROM
箱唛表
WHERE
目的国=a.目的国 AND (订单尾号=a.订单尾号 OR 运输方式=a.运输方式) )
多了个a., SORRY
------解决方案--------------------
OR来做优先级判断不严谨
------解决方案--------------------
某些情况下可以,不过不保证你这个可以,要看数据情况,另外非要一个语句吗?
------解决方案--------------------
select top 1 * from (
select 1 ft,你要的业务字段 from a
join b on 目的国+订单尾号 去和订单表连接
where ...
union all
select 2 ft,你要的业务字段 from a
join b on 目的国+运输方式 去和订单表连接
) a
order by ft