2011-03-28 97 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