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)进行内部连接,并从每个列中获得不同值的组合。