我有兩個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
);
重新排序,我得到這個錯誤信息「您無法在FROM子句中指定目標表'log'進行更新」 – 2013-02-22 15:31:31
此錯誤表明您有'UPDATE LOG ... SELECT ID FROM LOG',您是否正在嘗試更新日誌,同時選擇它?如果你是,你將需要另一種解決方案。 – sjdaws 2013-02-22 22:43:36
它現在是一個幾個月大,但也許可以幫助你或其他人通過谷歌找到這個......
如果你想更新相同選擇的表使用此字段:
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
。另外,subsubquery字段名稱相匹配的子查詢字段名的情況下,你做這樣的事情SELECT COUNT(*)
或SELECT CONCAT('#', ID)
可以,但永遠只能返回相同的員工,除非你是ID的所有時間 – 2013-02-22 02:01:06