我有两个 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';
我可以在一个查询中完成所有操作吗?
我有两个 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';
我可以在一个查询中完成所有操作吗?
只需将它们加在一起:
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
);
现在已经几个月了,但也许可以帮助您或其他人通过 google 找到它……</p>
如果要更新同一选定表中的字段,请使用:
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)