日期:2014-05-16  浏览次数:20486 次

条件可选的两个表能连接起来查询吗?
订单表:
订单编号、目的国、运输方式、订单尾号

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


现在想用一句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来做优先级判断不严谨
------解决方案--------------------
引用:
Quote: 引用:

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