簡體   English   中英

如何在FROM子句中的MySQL UPDATE查詢中使用子查詢

[英]How to use a subquery in UPDATE query in MySQL within FROM clause

我必須在一個MySQL數據庫中更新一個表中的多行,其中查找要更新的行的條件在同一張表中。

例如,我有一個名為“ cdrs”的表。 表中有一列稱為“ tf”,這是我必須更新的列。 具有更新條件或非更新條件的列為“ calltype”。 “ recordId”是該表的鍵。 我正在使用的查詢是這個:

UPDATE cdrs
SET tf = 1
WHERE recordId in (SELECT recordId from cdrs WHERE calltype = 11);

但是通過此查詢,我得到以下錯誤:

錯誤代碼:1093。您不能在FROM子句中指定目標表'cdrs'進行更新。

我在這里搜索,說實話,找到了許多關於此問題的帖子,但是當同一個表位於SET子句中而不是WHERE時,所有這些帖子都處理了此問題。 例如,我發現了這篇文章: MySQL錯誤1093-無法在FROM子句中指定目標表進行更新

我試圖使用這個想法,但沒有成功。

有沒有人遇到同樣的問題並找到了解決方案? 感謝您為解決此問題提供的幫助。

非常感謝Joao Paulo

您可以執行簡單的請求:

UPDATE cdrs SET tf = 1 WHERE calltype = 11;

這個問題的通用答案是,您不能在子查詢中使用與主更新查詢中相同的表,可以通過以下技巧解決此問題:

UPDATE cdrs
SET tf = 1
WHERE recordId in (SELECT recordId from (SELECT * FROM cdrs) innerCdrs WHERE calltype = 11);

之所以有效,是因為您不是在使用表cdrs而是根據查詢SELECT * FROM cdrs創建一個臨時表。

但是,根據您的情況,您的查詢可以大大簡化為

UPDATE cdrs SET tf=1 WHERE calltype=11

它就像UPDATE cdrs SET tf = 1 WHERE calltype = 11;一樣簡單UPDATE cdrs SET tf = 1 WHERE calltype = 11;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM