如何根据基于另一个表的case语句更新表? (在MySQL)

问题描述:

我有2个表:如何根据基于另一个表的case语句更新表? (在MySQL)

TBL1

  • STDNum
  • ID
  • 检查

TBL2

  • STDNum
  • UpdateMe

STDNum是共同的专栏。在TBL1中,相同的STDNum可以具有多个具有不同ID的行(在TBL2中不是这种情况)。 我想结果是更新UpdateMe列TBL2 IF(其值设置为1)(且仅当)在TBL1的Check列特定STDNum被全部设置为1

任何人都可以帮我吗?或任何想法请吗?

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