HY!
我有2张桌子。结构如上:
生
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
的相关信息
id address tel code
1 fdsf 00232 1
2 gffdfd 322 1
3 dsdd 1833 2
4 gffg 43333 3
5 fff 1933 1
我想获得一个结构表:
idStudent name age address tel code
1 john 18 1
3 john 18 2
4 mark 18 3
所以我想要做的是获取一个包含唯一代码的表,以及所有其他字段要填充表中出现的第一个或最后一个(对我来说并不重要)数据。我不希望有重复的代码字段,这对我很重要。
答案 0 :(得分: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
答案 1 :(得分:0)
如果您只想获得每个学生的每个表中的信息,这是一个简单的JOIN查询:
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 clausule获取分组的信息,使用MIN或MAX获取您未分组的每个字段的值。
已编辑以考虑user599977的评论:
从您的评论中我想象您在信息中有重复的行?如果是这样的话,您可以执行以下操作:
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
)
假设您有一些带有时间戳的列或某些数据允许您确定哪一行是用户输入的最后一行。