2013-07-11 34 views
0

我想知道有人能帮我解决这个问题。 我想要更新table1 SET“1”列中所有属于tab1ID值的ID(TABLE1)在列结果中的值为1. 表1中的ID与表2中的tab1ID有关。希望这会清楚:只有在检查另一张表的值后才更新一张表

表1:

id | result | 
1 | null |  
2 | null |  
3 | null | 

表2:

id | tab1ID | result | 
1 | 1 | 1  
2 | 1 | 0 
3 | 1 | 1  
4 | 2 | 1 
5 | 2 | 1  
6 | 2 | 1  
7 | 3 | 0 
8 | 3 | 1 
9 | 3 | 1 

上的更新的语句应立即更新TABLE1是这样的:

表1:

id | result | 
1 | 0 |  
2 | 1 |  
3 | 0 | 

现在在ID2的结果是1,因为table2中所有属于tab1ID(2)的行都有结果值1

我怎样才能用一个更新语句做到这一点?

回答

2

此查询假定Table2.Result的值仅为10

UPDATE table1 a 
     INNER JOIN 
     (
      SELECT tab1ID, COUNT(*) = SUM(result) result 
      FROM table2 
      GROUP BY tab1ID 
     ) b ON a.ID = b.tab1ID 
SET  a.result = b.result 
+0

非常感谢您的帮助。这工作正常!但是最初Table2.Result = NULL。这意味着,如果其中一个Teble2.results为NULL,那么Table1.result将为0。对不起,我应该提到它之前..我的坏.. – user2569468

+0

因此'NULL'计数或不?根据你给出的例子,如果有另外的记录'10 | 2 | NULL',是表1中'1'还是'0'中'2'的值? –

+0

在这种情况下,我想不更新table1。我只想更新table1,如果所有的表2结果是1或0.也许,这是不可能与纯粹的MySQL,我首先必须检查与PHP .. – user2569468

相关问题