在没有唯一键的两个表上选择查询
Posted
技术标签:
【中文标题】在没有唯一键的两个表上选择查询【英文标题】:select query on two tables with no unique keys 【发布时间】:2011-02-09 12:44:50 【问题描述】:我有两张桌子。
表1
col1 col2 col3 100 一个 1000 100 一个 1000 100 1002 100 乙 1003 100 C 1004
表2
col1 col2 colC 100 A 1X 100 A 2X 100 A 3X 100 B 4X 100℃ 5X
上表中colC的值是唯一的。
我希望我的输出是这样的,其中 colC 值在这里也是唯一的。
col1 col2 col3 colC 100 A 1000 1X 100 A 1000 2X 100 A 1002 3X 100 B 1003 4X 100 C 1004 5X
我必须使用 col1 和 col2 作为连接的键。
这样可以吗。当我尝试使用内连接和左外连接时,前两条记录出现重复。 TIA
【问题讨论】:
鉴于 1X 和 2X 的唯一性 - 选择 col3 = 1000 而不是 1003 的业务规则是什么?反之亦然 3X 你的例子没有意义。当 col1 和 col2 分别为 100 和 A 时,它与表 1 中的 1000、1000 和 1002 相关联。在表 2 中,它与 1X、2X 和 3X 相关联。即使考虑到您的唯一性要求,您也会得到与所有三个 colC 相关联的 1000 和与所有三个 colC 相关联的 1002。所以至少 100 行 6 行。 @Mark - 根据我的要求,当 t1.col1=t2.col1 和 t1.col2=t2.col2 超过一行时,colC 可能会变得混乱并分配给任何一条记录在输出中。 【参考方案1】:这样的?
select
a.col1,
a.col2,
a.col3,
b.colC
from (
select
row_number() over (partition by col1, col2 order by 1) r,
col1,
col2
from
table1
) a, (
select
row_number() over (partition by col1, col2 order by 1) r,
col1,
col2
from
table2
) b
where a.r = b.r and
a.col1 = b.col1 and
a.col2 = b.col2;
【讨论】:
是的,和我想的差不多。只有某些列名不正确,否则为 +1。【参考方案2】:SELECT t1.col1, t1.col2, t1.col3, t2.colC FROM Table1 t1
JOIN Table2 t2
ON t1.col1 = t2.col1
AND t1.col2 = t2.col2
这不对吗?
编辑:您说您得到了重复项,但这会发生,因为您指定为键的 2 列实际上不是键。还有其他行具有相同的值。因此,如果该组合是唯一的,则可能是数据有问题,或者您的需求需要重新考虑。
【讨论】:
以上是关于在没有唯一键的两个表上选择查询的主要内容,如果未能解决你的问题,请参考以下文章