mysql - 合并 MySQL 列排除重复项

标签 mysql merge move

我有这两张表:

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 列 move 到 studentdates.student_ticket_number 字段 student_id 匹配的地方。

因此,如果用户 John 的 student_id = 1,则将他的票号(例如 1234)从 students.student_ticket_number move 到 studentdates.student_ticket_number WHERE student_id = '1 '.

在表 studentdates.student_id 中可以有多个相同的记录,那么我想使用最低的 studentdates.student_date_id 并跳过其他记录。如果不清楚,请告诉我。

我想我需要以某种方式进行子查询,但是怎么做呢?

最佳答案

您需要获得最小值 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'

关于mysql - 合并 MySQL 列排除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596098/

相关文章:

mysql - 有没有人成功地使索引合并适用于 MySQL?

mysql - 获取列名作为变量的mysql列的值

ios - 更改assetVideoTrack的preferredTransform以解决合并视频时的镜像问题

boost - 在 C++11 中的 boost::asio 套接字对象上重复 std::move

java - 更新 Jooq 的自动生成类

php - 未从数据库 PHP LongBlob 接收图像

python - 合并两个字典,同时保留每个键的原始值和新值

java - 如何使用 OWL API 4 或 3.5 正确合并 2 个本体

c++ - 默认情况下应调用 move 构造函数

c++ - 如何管理对象之间的一对多关系? ( move 相关)