Sql 如何从两个表中选择不同的值限制为一行

Sql 如何从两个表中选择不同的值限制为一行,sql,oracle,Sql,Oracle,我有两个具有此值的表: **table 1** id name value 1 A 1 2 B 1 3 F 2 4 G 3 **table 2** id name value 1 C 1 2 D 1 3 E 2 如果我通过值对两个表进行内部联接,我得到: A C A D B C B D F E 但是,问题是我只希望这两列中的值不同,如下所示: A C B D F E 另一组可能的结果是: A D

我有两个具有此值的表:

**table 1**    
id name value
1   A     1
2   B     1
3   F     2
4   G     3

**table 2**
id name value
1   C     1
2   D     1
3   E     2
如果我通过值对两个表进行内部联接,我得到:

A C
A D
B C
B D
F E
但是,问题是我只希望这两列中的值不同,如下所示:

A C
B D
F E
另一组可能的结果是:

A D
B C
F E
表1的名称不可能出现在表2中

如果已经从列中选择了一个值,则无法再次选择该值。此示例将是一个错误,因为已选择C:

A C
B C
F E

有什么想法吗?

根据你提供的数据和你用来加入的专栏,你得到了你应该得到的结果

要获得所需的结果,您需要在
id
上加入,而不是
value

因此:

select a.id, a.name, b.name
from tableA a
inner join tableB b on a.id = b.id

根据您提供的数据和用于加入的列,您将得到您应该得到的结果

要获得所需的结果,您需要在
id
上加入,而不是
value

因此:

select a.id, a.name, b.name
from tableA a
inner join tableB b on a.id = b.id

根据您提供的数据和用于加入的列,您将得到您应该得到的结果

要获得所需的结果,您需要在
id
上加入,而不是
value

因此:

select a.id, a.name, b.name
from tableA a
inner join tableB b on a.id = b.id

根据您提供的数据和用于加入的列,您将得到您应该得到的结果

要获得所需的结果,您需要在
id
上加入,而不是
value

因此:

select a.id, a.name, b.name
from tableA a
inner join tableB b on a.id = b.id

为了对记录进行配对,您需要为每个要链接的值指定一个运行编号。使用行号()进行此操作

select t1.name as t1_name, t2.name as t2_name
from
(
  select name, value, row_number() over (partition by value order by name) as rn 
  from table1
) t1
join
(
  select name, value, row_number() over (partition by value order by name) as rn
  from table2
) t2
on t1.value = t2.value and t1.rn = t2.rn;

SQL fiddle:。

为了对记录进行配对,每个值都需要一个可链接的运行编号。使用行号()进行此操作

select t1.name as t1_name, t2.name as t2_name
from
(
  select name, value, row_number() over (partition by value order by name) as rn 
  from table1
) t1
join
(
  select name, value, row_number() over (partition by value order by name) as rn
  from table2
) t2
on t1.value = t2.value and t1.rn = t2.rn;

SQL fiddle:。

为了对记录进行配对,每个值都需要一个可链接的运行编号。使用行号()进行此操作

select t1.name as t1_name, t2.name as t2_name
from
(
  select name, value, row_number() over (partition by value order by name) as rn 
  from table1
) t1
join
(
  select name, value, row_number() over (partition by value order by name) as rn
  from table2
) t2
on t1.value = t2.value and t1.rn = t2.rn;

SQL fiddle:。

为了对记录进行配对,每个值都需要一个可链接的运行编号。使用行号()进行此操作

select t1.name as t1_name, t2.name as t2_name
from
(
  select name, value, row_number() over (partition by value order by name) as rn 
  from table1
) t1
join
(
  select name, value, row_number() over (partition by value order by name) as rn
  from table2
) t2
on t1.value = t2.value and t1.rn = t2.rn;


SQL FIDLE:。

A D和B C的结果一样好吗?这有关系吗?我尝试了选择最小(a.name,b.name),最大(a.name,b.name),但没有结果。选择不工作…是!AD和BC也将是一个好结果。另一个具有唯一值的组合。也许您应该向测试数据和预期结果添加其他数据。。。如果表1和表2中都存在相同的
名称
,会发生什么情况?在这一点上,我不是很清楚你在寻找什么。@Kritner这两个表中都不可能有名字。我编辑并添加了一些数据。A D和B C的结果一样好吗?这有关系吗?我尝试了选择最小(a.name,b.name),最大(a.name,b.name),但没有结果。选择不工作…是!AD和BC也将是一个好结果。另一个具有唯一值的组合。也许您应该向测试数据和预期结果添加其他数据。。。如果表1和表2中都存在相同的
名称
,会发生什么情况?在这一点上,我不是很清楚你在寻找什么。@Kritner这两个表中都不可能有名字。我编辑并添加了一些数据。A D和B C的结果一样好吗?这有关系吗?我尝试了选择最小(a.name,b.name),最大(a.name,b.name),但没有结果。选择不工作…是!AD和BC也将是一个好结果。另一个具有唯一值的组合。也许您应该向测试数据和预期结果添加其他数据。。。如果表1和表2中都存在相同的
名称
,会发生什么情况?在这一点上,我不是很清楚你在寻找什么。@Kritner这两个表中都不可能有名字。我编辑并添加了一些数据。A D和B C的结果一样好吗?这有关系吗?我尝试了选择最小(a.name,b.name),最大(a.name,b.name),但没有结果。选择不工作…是!AD和BC也将是一个好结果。另一个具有唯一值的组合。也许您应该向测试数据和预期结果添加其他数据。。。如果表1和表2中都存在相同的
名称
,会发生什么情况?在这一点上,我不是很清楚你在寻找什么。@Kritner这两个表中都不可能有名字。我编辑并放置了更多的数据。这是一组值作为示例。我需要使用值(而不是id)进行内部连接,并从每个列中获得不同值的组合。我需要使用值(而不是id)进行内部连接,并从每个列中获得不同值的组合。我需要使用值(而不是id)进行内部连接,并从每个列中获得不同值的组合。我需要使用值(而不是id)进行内部连接,并从每个列中获得不同值的组合。