我有以下架构:

Purchase             : pur_dt | pur_amt | item_code | quantity
ItemListForSoftware  : item_code | item_desc | ...
ItemListForHardware  : item_code | item_desc | ...


现在,我需要根据购买的item_代码从item_desc表中的任何一个获取item_desc。
如果项代码以S开头,则应在ItemListForSoftware中查找
硬件项列表中的其他项
像这样的东西
if(item_code starts with S){
 select pur_dt,pur_amt,item_desc,quantity from Purchase, ItemListForSoftware where Purchase.item_code=ItemListForSoftware.item_code
}else{
  select pur_dt,pur_amt,item_desc,quantity from Purchase, ItemListForHardware where Purchase.item_code=ItemListForHardware.item_code
}


有没有一种方法可以通过单一的SQL查询做到这一点?

最佳答案

这就是你想要的吗?

select p.pur_dt, p.pur_amt,
       coalesce(ifs.item_desc, ifh.item_desc) as item_desc,
       p.quantity
from Purchase p left join
     ItemListForSoftware ifs
     on p.item_code = ifs.item_code and
        p.item_code like 'S%' left join
     ItemListForHardware ifh
     on p.item_code = ifh.item_code and
        p.item_code not like 'S%';

注意正确的JOIN语法。

10-08 11:18