Oracle SQL - 加入子条件

亚历山大·泰巴尔迪

我在 Oracle 数据库中有表:项目(id、类型、名称)和合同(id、item_id)。

我想选择所有类型为“销售”并有合同的项目或所有类型为“礼品”的项目(无论此处是否有合同)。

为此,我打字:

SELECT
  i.id,
  c.id as contract_id,
  i.type,
  i.name
FROM
  items i,
  contracts c,
  -- others table
WHERE
  -- some implicit joins
  AND (
    (i.type = 'sale' AND c.item_id = i.id) OR
    (i.type = 'gift')
  )

这不起作用。

仅当类型为“销售”时,如何选择“销售”和“礼品”类型的产品并加入合同?

去世

您的查询不起作用,因为您使用的是 INNER JOIN (尽管使用了古老的语法)。
所以你的第二个条件:

或所有属于“礼物”类型的物品(无论​​此处是否有合同)


无法应用,因为 INNER JOIN 从没有任何合同的项目中删除行。
使用LEFT JOIN

select 
  i.id,
  c.id as contract_id,
  i.type,
  i.name
from items i left join contracts c
on c.item_id = i.id
where 
    (i.type = 'sale' AND c.item_id is not null) 
    OR
    (i.type = 'gift')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章