2012-09-26 75 views
1

我有這兩個表:合併MySQL的列排除重複

desc students 
+-----------------------+---------+------+-----+---------+----------------+ 
| Field     | Type | Null | Key | Default | Extra   | 
+-----------------------+---------+------+-----+---------+----------------+ 
| student_id   | int(11) | NO | PRI | NULL | auto_increment | 
| student_ticket_number | int(11) | YES |  | 0  |    | 
+-----------------------+---------+------+-----+---------+----------------+ 

desc studentdates 
+-----------------------+---------+------+-----+---------+----------------+ 
| Field     | Type | Null | Key | Default | Extra   | 
+-----------------------+---------+------+-----+---------+----------------+ 
| student_date_id  | int(11) | NO | PRI | NULL | auto_increment | 
| student_id   | int(11) | YES |  | NULL |    | 
| student_ticket_number | int(11) | YES |  | 0  |    | 
+-----------------------+---------+------+-----+---------+----------------+ 

我想列移動students.student_ticket_numberstudentdates.student_ticket_number其中場比賽student_id

所以如果用戶約翰有student_id = 1將他的門票號碼(例如1234)從students.student_ticket_number移到studentdates.student_ticket_number WHERE student_id = '1'

在表studentdates.student_id可以有多個相同的記錄,然後我想用最低的studentdates.student_date_id並跳過其他。告訴我,如果這不清楚。

我想我需要做一個子查詢莫名其妙地如何?

回答

1

您需要在子查詢中獲取最小值student_date_ID然後將其與其他表連接。試試這個,

UPDATE students a 
     INNER JOIN studentdates b 
      ON a.student_ID = b.student_ID 
     INNER JOIN 
     (
      SELECT student_ID, MIN(student_date_ID) minID 
      FROM studentDates 
      GROUP BY student_ID 
     ) c ON b.student_ID = c.student_ID AND 
       b.student_date_id = c.minID 
SET  a.student_ticket_number = b.student_ticket_number 
WHERE a.student_id = '1' 

UPDATE students a 
     INNER JOIN studentdates b 
      ON a.student_ID = b.student_ID 
     INNER JOIN 
     (
      SELECT student_ID, MIN(student_date_ID) minID 
      FROM studentDates 
      GROUP BY student_ID 
     ) c ON b.student_ID = c.student_ID AND 
       b.student_date_id = c.minID 
SET  b.student_ticket_number = a.student_ticket_number 
WHERE a.student_id = '1' 
+0

你好,謝謝你的回覆。這看起來不錯,但我需要'更新'表'studentdates'不是'學生',但我想我可以折騰你的查詢:) – David

+0

哦,我的不好,我只是更新我的查詢:)對不起 –

+0

@ David通過交換其別名「SET b.student_ticket_number = a.student_ticket_number」來完成這項工作? –

1
Update studentdates sd,students s,(select student_id,min(student_date_id) as minstudDateId from studentdates group by student_id) sm 
SET sd.student_ticket_number = s.student_ticket_number 
where sd.student_id=s.student_id 
and sd.student_id=sm.student_id 
and sd.student_date_id=sm.minstudDateId 
+0

錯誤代碼:1093您不能指定目標表 'SD' 的更新在FROM子句 – David

+0

嘗試此更新的查詢 – AnandPhadke

+0

你好,我和John Woos一起查詢。謝謝您花時間。 Upvoted your post – David