代码更新: 在#left 表中添加了 [score] 列。连接必须从#left 表中提取学生姓名和分数。任何一个分数都可以,但不应拉取重复的 student_id。我在想光标可以做到吗?
我正在运行这份报告。问题类似于我创建的脚本。总而言之,我有两张表,我们称之为#left 和#right。#right 表是包含金额的关键表。但是#left 表包含我也必须检索的代理名称。
create table #left (
id int not null primary key identity,
student_id int, name varchar(20),score int)
insert into #left values( 1, 'James',10)
insert into #left values( 2, 'Parker',20)
insert into #left values( 3, 'Smith',30)
insert into #left values( 4, 'Rog',40)
insert into #left values( 1, 'James',50)
insert into #left values( 2, 'Parker',60)
create table #right (
id int not null primary key identity,
student_id int,
amount decimal(5,2)
)
insert into #right values (1,5.25)
insert into #right values (3,7.25)
insert into #right values (4,3.25)
insert into #right values (1,5.25)
这里的问题是我想加入 student_id 上的两个表,但是你可以看到#left 表包含 James 和 Parker 2 次具有相同的 id。让我们假设这是数据库错误。
#right 表中可能存在类似的问题。但这不是一个错误。它只是意味着#left 学生与两次付款相关联(即使两次付款相同)。
我想从 #left 表中删除 dups 并将 dups 保留在 #right 表中。
我想出了这个查询,它有效
/* query 1 */
select student_id, amount from #right R
where exists
(
select student_id from #left L
where R.student_id = L.student_id
);
但这里的问题是我还需要从另一个表中提取学生姓名。有没有办法做到这一点。它可以是任何语法,但需要高效的查询。