Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql连接问题_Sql_Join_Duplicates - Fatal编程技术网

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