sql连接问题
嘿sql连接问题,sql,join,duplicates,Sql,Join,Duplicates,嘿 我有两张桌子。结构如下所示: 学生 idStudent name age job code 1 john 18 student 1 2 john 19 programmer 1 3 john 18 developer 2 4 mark 18 student 3 5 mark 19 prog
我有两张桌子。结构如下所示: 学生
idStudent name age job code
1 john 18 student 1
2 john 19 programmer 1
3 john 18 developer 2
4 mark 18 student 3
5 mark 19 programmer 1
信息
我想获得一个具有以下结构的表:
idStudent name age address tel code
1 john 18 1
3 john 18 2
4 mark 18 3
因此,我想做的是获得一个具有唯一代码的表以及所有其他字段,这些字段将填充表中出现的第一个或最后一个(对我来说不重要)数据。我不想有重复的代码字段,这对我很重要 如果您只想获得每个学生在每个表中的信息,这是一个简单的联接查询:
SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
如果您有重复的信息,您可以使用GROUP BY子句获取分组信息,使用MIN或MAX获取未分组的每个字段的值
编辑以考虑用户599977的评论:
根据您的评论,我认为您在info?中有重复的行,如果是这种情况,您可以执行以下操作:
SELECT e.idStudent, max(e.name), max(e.age), max(i.address), max(i.tel), max(e.code)
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
GROUP BY e.idStudent
但我建议您过滤一些更可预测的字段,比如上次引入的记录或类似的内容
例如:
SELECT e.idStudent, e.name, e.age, i.address, i.tel, e.code
FROM students e
INNER JOIN infos i ON e.idEstudent=i.id
WHERE i.loadDate= (
SELECT max(loadDate)
FROM infos
WHERE id=e.idStudent
)
假设您有一个带有时间戳的列或一些允许您确定用户最后输入的行的数据。为什么两个表中的
code
字段重复?我尝试了三次,但我得到了代码1…因为其他字段的信息不同…我只想获得一次
select S.IdStudent, MIN(Name) Name, MIN(Age) Age, MIN(Address) Address, MIN(Tel) Tel, MIN(Code) Code
FROM Students S Inner Join Info I ON S.IDStudent = I.Id
group by S.IdStudent
select S.IdStudent, MIN(Name) Name, MIN(Age) Age, MIN(Address) Address, MIN(Tel) Tel, MIN(Code) Code
FROM Students S Inner Join Info I ON S.IDStudent = I.Id
group by S.IdStudent