【发布时间】:2011-02-01 18:18:09
【问题描述】:
我的问题与Restricting a LEFT JOIN 非常相似,但有所不同。
假设我有一张桌子 SHOP 和另一张桌子 LOCATION。 Location 是表 SHOP 的一种子表,它有两列感兴趣,一个是 Division Key(简称为 KEY)和一个“SHOP”编号。这与表 SHOP 中的数字“NO”匹配。
我试过这个左外连接:
SELECT S.NO, L.KEY
FROM SHOP S
LEFT OUTER JOIN LOCATN L ON S.NO = L.SHOP
但我得到了很多重复,因为有许多位置属于一个商店。我想消除它们,只得到一个“商店,钥匙”条目的列表,没有重复。
数据正确但重复出现如下:
SHOP KEY
1 XXX
1 XXX
2 YYY
3 ZZZ
3 ZZZ etc.
我希望数据显示如下:
SHOP KEY
1 XXX
2 YYY
3 ZZZ etc.
SHOP表:
NO
1
2
3
LOCATION 表:
LOCATION SHOP KEY
L-1 1 XXX
L-2 1 XXX
L-3 2 YYY
L-4 3 YYY
L-5 3 YYY
(ORACLE 10g 数据库)
【问题讨论】:
-
你不应该得到任何重复,但是,正如你所说,如果你有不止一个商店的位置记录,你可能会得到不止一个商店的钥匙。请解释或举例说明“重复”的含义。
-
@Marcus 我一开始也是这么想的,但我假设多个位置可以有相同的除法键。
-
@Marcus & Martin:啊,我想我没有说清楚。是的,多个位置可以并且确实具有相同的分区键。 (严格来说 divnkey 是 shop 的父级。所以层次结构类似于 Divnkey > Shop > location)。我正在尝试用适当的部门键数据填充 Shop 的表。可能听起来很奇怪,但这是一个一次性的过程,我试图从表 LOCATION 的数据中为表 SHOP 生成更新脚本 - 通过选择“更新商店设置 divnkey = ....”命令。不想让问题复杂化,所以做一个简单的选择。
-
抱歉,刚刚看到您的回复。将再次更新我的答案。
标签: sql oracle oracle10g left-join outer-join