我在 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/