2014-01-10 56 views
1

我想寫查詢反對下表MySQL的錯誤代碼:1093您不能指定目標表「XYZ」的更新在FROM子句

Table A 
======== 
ID 
A1 


Table B 
========= 
ID 
B1 

查詢1:

update A 
set A.A1 =(
select count (distinct b1) 
from B 
join A on A.ID = B.ID 
Group by B1 

給我一個錯誤 -

MySQL的錯誤代碼:1093。你不能指定目標表更新在FROM子句

因此我想下面的查詢如下:

查詢2:

update A 
set A1 = (
    select count from (
    select count(distinct B1) as count 
     from B 
     join A on A.ID = B.ID 
     group by ID 
) s 
); 

上面的查詢給了我錯誤

錯誤代碼:1242子查詢返回多個1行

我試着創建登臺表如下,它的工作原理。

查詢3:

insert into stg 
(
par1, 
par2 
) 
select ID, count(distinct B1) from B group by ID; 


update A 
set A1 = (select par2 from stg where A.pm = stg.par1); 

有沒有更好的辦法做?

感謝

+1

如果你想從你正在更新的表中選擇,你可以欺騙MySQL與另一個子查詢。 –

+0

可能的重複:http://stackoverflow.com/questions/45494/mysql-error-1093-cant-specify-target-table-for-update-in-from-clause – Ritesh

回答

2

如果只計算沒有引用計數,然後跳過GROUP BY

變化。

update A 
JOIN (select count(distinct B1) as count FROM B JOIN A on A.ID = B.ID) B 
set A.A1=B.count; 
+0

當我運行上面的查詢,它給了我以下錯誤 - 錯誤代碼:1093.您無法在FROM子句中指定目標表「A」進行更新。當我將它放在另一個select語句中時,出現錯誤,說明錯誤代碼1062:重複主鍵的重複條目'4844'。 –

+0

我做了一個改變。起初我有些sl,,但現在它加入了桌子,而不是在實際更新中使用它。這應該工作,讓我知道! –

相關問題