2013-02-11 41 views
1

我有2個表:如何根據基於另一個表的case語句更新表? (在MySQL)

TBL1

  • STDNum
  • ID
  • 檢查

TBL2

  • STDNum
  • UpdateMe

STDNum是共同的專欄。在TBL1中,相同的STDNum可以具有多個具有不同ID的行(在TBL2中不是這種情況)。 我想結果是更新UpdateMe列TBL2 IF(其值設置爲1)(且僅當)在TBL1的Check列特定STDNum被全部設置爲1

任何人都可以幫我嗎?或任何想法請嗎?

回答

0
UPDATE tbl2 b 
     INNER JOIN 
     (
      SELECT STDNum 
      FROM tbl1 s 
      GROUP BY STDNum 
      HAVING MAX(s.check) = MIN(s.Check) AND 
        MAX(s.Check) = 1 
     ) a ON a.STDNum = b.STDNum 
SET  b.UpdateMe = 1 

OR

UPDATE tbl2 b 
     INNER JOIN 
     (
      SELECT STDNum 
      FROM tbl1 
      GROUP BY STDNum 
      HAVING SUM(Check = 1) = COUNT(*) 
     ) a ON a.STDNum = b.STDNum 
SET  b.UpdateMe = 1 
+0

我其實新的MySQL和我有點不明白,b和你已經包括在你的代碼中的一個。它們只是變量嗎?謝謝。 – Sang 2013-02-11 13:51:04

+0

我試過你的代碼,它的工作!非常感謝! :D – Sang 2013-02-11 14:05:03

+0

'a'和'b'被稱爲'ALIAS'。當你有更長的表名時,它們很有用。 *如果你碰巧問我爲什麼選擇'a'和'b'作爲他們的別名,那是因爲我習慣了它。* – 2013-02-11 14:08:42

相關問題