当前位置: 首页 > 面试题库 >

在Oracle中使用IN运算符进行外部联接的解决方法

微生旻
2023-03-14
问题内容

我正在使用Oracle SQL,因此外部联接具有不错的(+)语法。我应该警告您,不允许我重新设计数据库;我为一个大型组织工作。

以下是一些示例表:

People
PersonID   Name
1          Elmo
2          Oscar
3          Chris

Attribute
PersonID   Attribute
1          Happy
1          Muppet
1          Popular
2          Grouchy
2          Muppet
2          Popular
3          Programmer

我想要一个人的名单,我想知道我们是否知道他们的幸福或脾气暴躁。以下是我想要的输出:

Name       Mood
Elmo       Happy
Oscar      Grouchy
Chris

所以这是我想使用的查询:

SELECT p.Name, a.Attribute
FROM People p, Attributes a
WHERE p.PersonID = a.PersonID (+)
AND ( a.Attribute (+) = 'Happy'
   OR a.Attribute (+) = 'Grouchy' )

(也许我必须输入“ OR a.Attribute IS NULL”或其他内容。)

但是实际上,我根本不允许在外部联接中使用OR!我实际上应该怎么做?


问题答案:

首先,为什么不能使用适当的OUTER JOINs?您可以在Oracle中使用它们而不必使用(+)语法进行隐式联接。至于您的问题,您可以使用IN

SELECT p.Name, a.Attribute
FROM People p
LEFT OUTER JOIN Attributes a
ON p.PersonID = a.PersonID AND a.Attribute IN ('Happy','Grouchy')


 类似资料:
  • 问题内容: 有人可以验证内部连接对PL SQL中的UPDATE语句是否有效吗?例如 问题答案: 该synthax在Oracle SQL中不起作用。 在Oracle中,如果表是“键保留”的,则可以更新联接,即: 假设这是的主键,则此连接是可更新的,因为对于A的每一行,B 最多 只有一行,因此该更新是确定性的。 在您的情况下,由于更新后的值不依赖于另一个表,因此您可以使用具有EXIST条件的简单更新,

  • 本文向大家介绍vue.js 中使用(...)运算符报错的解决方法,包括了vue.js 中使用(...)运算符报错的解决方法的使用技巧和注意事项,需要的朋友参考一下 今天在起别人项目的时候, 发现报错。 这个错误是,项目中不识别es6的扩展运算符, 解决方式很简单。 // 第二步 看一下你的 .babelrc 里面是否有识别es6语法的配置 这两都做完,我发现又报错了。原因是你只配置了。但是没有下载

  • 问题内容: 我使用FULL OUTER JOIN联接了2个表,这花了6分钟来运行并给出输出。 我使用LEFT OUTER JOIN和RIGHT OUTER JOIN的UNION做了同样的事情。仅用了15秒 有人知道为什么会这样吗? 问题答案: 您可能在两个表中都有很多行,共有几行,并且所讨论的列上没有索引。

  • 问题内容: 我有一个用例,其中我从某个模型中获得了符号化的深层关联,并且我必须执行某些涉及使用外部联接的查询。没有手工编写完整的SQL怎么办? 我不想要的答案:-使用include(无法很好地解决深层关联(.includes(:cars => [:windows,:engine => [:ignition] .....出乎意料的工作))而我却没有不想产生副作用)-自己编写SQL(对不起,这是201

  • 问题内容: 在Spring Data JPA(+ Hibernate)应用程序中考虑以下类: 我最常见的用例涉及调用以下方法(从继承): 每当调用此方法时,Hibernate都会发出以下SQL查询: 每当执行此查询时,我只对类中的公共字段感兴趣,因此我发现左外部联接无用。 问题在于,在我们的实际应用程序中,每个子表中都有8个子类,例如和和以及数百万条记录,这导致父表上的查询运行非常慢。 在这种情况

  • 问题内容: 我正在尝试在Dropwizard上使用MYSQL JDBI进行IN查询(我认为不相关)。 如这里的建议,我还用 但是,当我启动应用程序时,出现以下错误: 有谁对解决这个问题有个好主意? 问题答案: 有两种方法可以实现它。 1 。使用 该注释期望StringTemplate中具有SQL语句的组文件 说我有这个文件PersonExternalizedSqlDAO 由于我们正在使用,因此必须