2011-03-28 75 views
0

hy!
我有2个表格。该结构是上面:sql连接问题

学生

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

为什么'code'字段在两个表中都被复制? – JNK 2011-03-28 14:18:24

回答

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 
0

如果你想要的是获得每个表中的信息对每个学生,这是一个简单的连接查询:

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 
) 

假设你已经具有时间戳或一些数据,允许你确定哪一行是最后的是,用户输入的一些列。

+0

我试过,但我已经得到了三次代码1 ...因为来自其他领域的信息是不同的......我只想获得它一次 – user599977 2011-03-28 14:20:41