2015-06-11 47 views
0

我要計數每個業務點有交易或畫廊:如何使用select更新查詢? MySQL的

因此,如果企業有未空交易,或者至少有一個畫廊,business_data_count應該爲2

這是我」已經試過:

UPDATE `business` businessTable SET 
      business_data_count 
      = 
      sum(
          (
          SELECT 
            CASE 
             WHEN count(*)>= 1 then count(*) 
             ELSE 0 
            END as points 
          FROM gallery WHERE bussId=businessTable.bussId 
          ) 

          + 

          (
          SELECT 
            case 
             WHEN deal!='' then 1 
             ELSE 0 
            end 
          FROM business WHERE bussId=businessTable.bussId 
          ) 
      where 1 

,但我得到這個錯誤: 你不能指定表業務更新

如何解決這一問題?

+0

此查詢非常難以閱讀,請查看您是否可以更好地格式化它。錯誤的主要原因是您無法從正在更新的表中進行選擇,因此如果您可以設置查詢格式並解釋您的目標,則可能更容易找到解決方案。 – AdamMc331

回答

0

沒有必要從更新表中單獨選擇。試試這個(未經測試):

UPDATE business 
    SET business_data_count = (deal != '') 
     + (SELECT COUNT(*) 
      FROM gallery 
      WHERE bussId = business.bussId); 

在一個單獨的說明,這是一般不好的做法來存儲可以用查詢中輕鬆地提取數據,如上述。

+0

謝謝你的回答,但我不明白你的意見,你能否解釋一下。 – david

+0

@david我的意思是說像'business_data_count'這樣的列實際上並沒有將數據添加到表中;它只是預先存在的數據的一個功能。當你有一個從現有數據計算出的值時,通常最好使用查詢來進行計算,而不是將冗餘信息存儲在數據庫中。 – shmosel

+0

現在我明白了,實際上我存儲了這個值,因爲我會實時使用它。所以它會更快。我會每天更新一次該列。 – david

0

我認爲你有一個錯字。 我想你應該有:

UPDATE `business`.businessTable SET 

,而不是

UPDATE `business` businessTable SET 

如果您在查詢中定義的表時使用的模式,你需要將它們用點分隔()。

也許這不是唯一的問題,但這是第一個想到的。

+0

謝謝你的回答。其實我試圖使用別名。 – david