中级MySQL查询:根据单独的表列值更新表列

时间:2014-05-29 03:34:50

标签: mysql select sql-update

我有一个表ticketdetails,其中包含一个包含数据的列,我希望将其复制到另一个表的列中:

SELECT TicketID, MIN( StartTime ) StartTime
FROM ticketdetails
GROUP BY TicketID #might be unnecessary?
ORDER BY TicketID

输出如下:

enter image description here

我希望此查询的结果" StartTime",在我的其他表格列tickets.TimeScheduled中提供,其中TicketID匹配两个表。

现在我正在尝试:

UPDATE tickets SET TimeScheduled = (
SELECT MIN( StartTime ) StartTime
FROM ticketdetails
GROUP BY TicketID
ORDER BY TicketID)
WHERE tickets.TicketID = ticketdetails.TicketID

我收到此错误:

#1054 - Unknown column 'ticketdetails.TicketID' in 'where clause'

我知道这个列存在于我的数据库中。由于某种原因,查询无法识别该列。我想我需要一个JOIN或者其他东西,但对于中级高级MySQL查询我不是最好的。非常感谢帮助。

2 个答案:

答案 0 :(得分:2)

使用联接:

UPDATE tickets AS t
JOIN (SELECT TicketID, MIN( StartTime ) StartTime
      FROM ticketdetails
      GROUP BY TicketID) AS d ON t.TicketID = d.TicketID
SET t.TimeScheduled = d.StartTime

您收到Unknown column错误的原因是因为ticketdetails表仅存在于子查询中,而不存在于主查询中。

如果您想timeScheduled设置为NULL,如果ticketdetails中没有匹配的机票,请将JOIN更改为LEFT JOIN

顺便说一下,子查询中不需要ORDER BY

答案 1 :(得分:0)

您可以使用相关子查询执行此操作:

UPDATE tickets
    SET TimeScheduled = (SELECT MIN( td.StartTime ) StartTime
                         FROM ticketdetails td
                         WHERE td.TicketID = t.TicketID
                        );