Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在没有唯一键的两个表上选择查询_Sql_Oracle_Select - Fatal编程技术网

Sql 在没有唯一键的两个表上选择查询

Sql 在没有唯一键的两个表上选择查询,sql,oracle,select,Sql,Oracle,Select,我有两张桌子 表1 col1 col2 col3 100 A 1000 100 A 1000 100 A 1002 100 B 1003 100 C 1004 col1 col2 col3 100比1000 100比1000 100A 1002 100B 1003 100C1004 表2 col1 col2 colC 100 A 1X 100 A 2X 100 A

我有两张桌子

表1

col1 col2 col3
100 A 1000 100 A 1000 100 A 1002 100 B 1003 100 C 1004 col1 col2 col3
100比1000 100比1000 100A 1002 100B 1003 100C1004 表2

col1 col2 colC
100 A 1X 100 A 2X 100 A 3X 100 B 4X 100 C 5X col1 col2 colC
100 A 1X 100 A 2X 100 A 3倍 100B4X 100立方厘米 在上表中,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 col3 colC
100 A 1000 1X 100 A 1000 2X 100A 1002 3X 100B 1003 4X 100 C 1004 5X 我必须使用col1和col2作为连接的键

那有可能吗。当我尝试使用内部联接和左外部联接时,前两个记录中出现了重复项。短暂性脑缺血发作

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
这不对吗

编辑:您说您得到了重复项,但这会发生,因为您指定为键的两列实际上不是键。还有其他行具有相同的值。因此,如果组合是唯一的,那么要么是数据有问题,要么是您的需求需要再次调查

这不对吗

编辑:您说您得到了重复项,但这会发生,因为您指定为键的两列实际上不是键。还有其他行具有相同的值。因此,如果组合是唯一的,那么要么是数据有问题,要么是您的需求需要再次检查。

类似的情况

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;
像这样的

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;

考虑到1X和2X的唯一性,选择col3=1000而不是1003的业务规则是什么?反之亦然,因为你的例子毫无意义。当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可能会被混淆并分配给输出中的任何一条记录。鉴于1X和2X的唯一性,选择col3=1000而不是1003的业务规则是什么?反之亦然,因为你的例子毫无意义。当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。是的,与我的想法类似。只有某些列名不正确,否则为+1。