2014-03-04 185 views
0

我有兩個表,hires_owner和項目,其中hires_owner是項目中的數據的彙總表。我想定期用項目數據更新hires_owner。表結構如下:mysql更新選擇語句與多個表和左外連接

**hires_owner** 

id INT(11) AUTO-INCREMENT 
owner CHAR(25) UNIQUE 
hires_total INT(3) 

Sample data: 
1, tim, 0 
2, jack, 3 
3, brian, 1 
etc. 

**projects** 

id INT(11) AUTO-INCREMENT 
date DATE() **this is the report date stamp, not date of activity 
owner CHAR(25) 
accept DATE() 

sample data: 
1, 2014-02-01, jack, 2014-01-02 
2, 2014-02-01, jack, 2014-01-03 
3, 2014-02-01, tim, NULL 
etc. 

這個查詢得到我,我想推入hires_owner表中的結果:

select owner, count(accept) 
from projects 
where date = (select max(date) from projects) 
group by owner 

...但我可以似乎沒有得到正確的更新查詢。這裏有一個嘗試:

update hires_owner h 
set hires_total = p.Hires 
(select owner, count(accept) as Hires 
from projects 
where date = (select max(date) from projects) 
group by owner) p 
where p.owner = h.owner 

回答

0

試試這個: -

update 
hires_owner h 
inner join 
(select owner, count(accept) num_c 
from projects 
where date = (select max(date) from projects) 
group by owner) p 
on h.owner = p.owner 
set h.hires_total = num_c 
+0

這個工作 - 謝謝你的指導,不使用'Inner Join'或者把set語句放在最後是我的失敗,再次感謝。 –

0

您的查詢沒有指定要更新哪個所有者,並且它有點扭曲邏輯。 更新,讓我知道結果。

update hires_owner set hires_total = p.m 
from (select max(count(accept)) as m, owner as o 
        from projects 
        where date = (select max(date) from projects) 
        group by owner) as p 
where hires_owner = p.o; 
+0

得到以下錯誤:「#1064 - 你在你的SQL語法錯誤;檢查對應於您的MySQL服務器版本正確的語法手冊使用附近的'選擇所有者,最大(計數(接受))作爲來自項目的招聘人員日期=(選擇'在第3行......「 –

+0

我實際上正在處理這個問題,你介意用兩個查詢來替代嗎?@ tim_schaaf – SCV

+0

你的意思是兩個順序查詢嗎?我想我可以嗎? –