结合更新和选择查询

时间:2013-02-22 01:59:29

标签: mysql

我有两个MySQL工作正常,我正在尝试找到一种方法将它们组合成一个查询。

首先,它选择员工的ID。

SELECT 'ID' FROM `employee` ORDER BY ID DESC LIMIT 1;

假设它返回ID 100;

然后更新ID为100的员工的数据

UPDATE 'LOG' SET `TIME_EXIT`='2013/02/22' WHERE `ID`='100';

我可以在一个查询中完成所有操作吗?

2 个答案:

答案 0 :(得分:3)

只需将它们添加到一起:

UPDATE LOG SET TIME_EXIT = '2013/02/22' 
WHERE ID = (
              SELECT ID
              FROM employee
              ORDER BY ID DESC
              LIMIT 
            );

但基于该代码目前它只会更新最后一个employee,您需要使用其他标识符来选择正确的employee,以确保您拥有正确的标识符。

UPDATE LOG SET TIME_EXIT = '2013/02/22' 
WHERE ID = (
              SELECT ID 
              FROM employee 
              WHERE NAME = 'JOHN SMITH' 
              ORDER BY ID DESC 
              LIMIT 1
            );

答案 1 :(得分:0)

现在已经有几个月了,但也许可以帮助你或其他人通过谷歌找到这个......

如果要在同一个选定的表中更新字段,请使用以下命令:

UPDATE LOG SET
    TIME_EXIT = '2013/02/22' 
WHERE ID = (
        SELECT ID
        FROM (
            SELECT ID
            FROM LOG
            WHERE whatEverYouWantToCheck = whateverYouNeed
        ) AS innerResult 
    )

因此,您从子选择中选择id。如果您尝试直接对其进行子选择,mySQL将使用您的错误消息You can't specify target table 'log' for update in FROM clause,但这样您可以在子查询中隐藏子查询,这似乎没问题。不要忘记AS innerResult以避免收到错误消息#1248 - Every derived table must have its own alias。如果您执行SELECT COUNT(*)SELECT CONCAT('#', ID)

之类的操作,还会将子查询字段名称与子查询字段名称匹配