1

私はこれらの2つのテーブルを持っています:

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_numberする場所に列を移動したいと思います。studentdates.student_ticket_numberstudent_id

したがって、ユーザー John がstudent_id= 1 の場合、彼のチケット番号 (たとえば 1234) を からstudents.student_ticket_numberに移動しstudentdates.student_ticket_number WHERE student_id = '1'ます。

テーブルには複数の同一のレコードが存在する可能性があるため、最低のものを使用して他のレコードをスキップしstudentdates.student_idたいと思います。studentdates.student_date_idこれが不明な場合は教えてください。

どういうわけかサブクエリを実行する必要があると思いますが、どうすればよいですか?

4

2 に答える 2

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'
于 2012-09-26T06:55:38.227 に答える
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
于 2012-09-26T06:55:01.393 に答える