【发布时间】:2018-12-03 14:33:53
【问题描述】:
我有一个必须根据状态连接到另一个表的表。以下是表1数据的示例:
ROWID STATE
34 TX
56 NY
67 WA
89 TX
表一中的每一行都有状态值。表 2 中每个州都有两条记录。这是一个例子:
ROWID STATE NAME
19 TX Chuck, Brown
20 TX Nick, Johnes
正如您在表 2 中看到的,德克萨斯州有两条记录。如果我使用Left Outer Join 并尝试做这样的事情:
LEFT OUTER JOIN Table 2 TB2
ON TB1.STATE = TB2.SATE
那么输出会是这样的:
34 TX Chuck, Brwon
34 TX Nick, Johnes
89 TX Chuck, Brwon
89 TX Nick, Johnes
每一行都是重复的,因为我在表 1 中有两条德州记录。然后我在德克萨斯州的表 2 中有两条记录。我想看到的是这样的:
ROWID STATE NAME 1 NAME 2
34 TX Chuck, Brwon Nick, Johnes
基本上我想将两行合并为一,然后加入表 1。我最近开始从事这个项目,我们使用 Oracle 数据库。如果有人知道实现这一目标的好方法,请告诉我。谢谢。
【问题讨论】:
-
每个
State是否总是有0、1 或2 个Name记录?或者数字在设计时是可变的和/或未知的?是什么决定了Name是Name 1还是Name 2? -
@APC 表 2 中的状态总是有两条记录。没有什么特别的决定
Name 1或Name 2。总是应该有两个名字。我所需要的只是将它们组合起来(例如像这样Josh, Brown & Micky, Butt连接)。 -
如果您在表 1 中有两条 TX 记录,但在最终结果中您只有一条结果记录,那又如何呢?应该如何正确选择TX记录?或者您想在按 ROWID 排序时将名字与第一个 TX 记录连接起来,将第二个名字与第二个 TX 记录连接起来?
-
@Sentinel 如果您仔细查看我上面的示例,您会发现当前带有左外连接的代码是重复行。我想将同一状态的名称合并到一行中。因此,例如在表 2 中应该有一个 TX 记录,名称应该是这样的
Chuck, Brwon & Nick, Johnes或两列名称 1 和名称 2。我希望这将帮助您理解我想要实现的目标。 -
不需要外连接,除非您想从 table1 返回所有记录,即使 table2 中不存在匹配的记录。请参阅下面的答案,它提供了所需的输出,但不使用外连接。
标签: oracle oracle11g left-join oracle-sqldeveloper