我在 oracle db 中有三个表,分别是 newitems、itemdetails、ticketitems 表。
一些虚拟数据如下:

门票:

id    ticketid     itemid    quantity

1     100          9999      2
2     100          9998      5
3     100          2222      3

项目详情:
id    description    col_sumthing   extra_col
9999  Marlboro       val_sumthing   123_op
9998  Cigar Black    val_sumthing   456_pqwe

新东西:
id    description    col_sumthing
2222  100Pipes       val_different

最初我只需要从 itemdetails + ticketitems 中获取数据,这很容易使用简单的连接。查询是:
SELECT "TI".*, "I"."ID" AS "ITEMID", "I"."DESCRIPTION", "I"."col_sumthing"
  FROM "TICKETITEMS" "TI"
 INNER JOIN "ITEMDETAILS" "I" ON TI.ITEMID = I.ID
 WHERE (TI.TICKET = '100')

类似的东西。

现在引入了 newitem 表,其中可能还有一些项目存在于 ticketitems 表中。

所以我想要这样的结果:
Final Result:
id    description    itemid    quantity   col_sumthing    extra_col
1     Marlboro       9999      2          val_sumthing    123_op
2     Cigar Black    9998      5          val_sumthing    456_pqwe
3     100Pipes       2222      3          val_different

我面临的问题是,它应该只在 itemdetails 中找不到详细信息时才检查 NEWITEMS。也欢迎任何其他解决方法。

最佳答案

您可以使用两个 OUTER 联接:

SELECT ti.*,
       nvl(i.id, n.id) itemid,
       nvl(i.description, n.description) description,
       nvl(i.col_sumthing, n.col_sumthing) col_sumthing
  FROM ticketitems ti
  LEFT JOIN itemdetails i ON ti.itemid = i.id
  LEFT JOIN newsitems n ON ti.itemid = n.id
 WHERE ti.ticket = '100'

只要两个详细信息表都将 ID 作为主键,这将起作用。如果您有两个以上的明细表,请使用 COALESCE

关于sql - Oracle 查询 : Making conditional fetch in single query,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11263839/

10-16 02:50