2017-05-08 63 views
0

我想更新取决于变量如表:SQL有条件更新情况

$number = 3; 

UPDATE Table1 m 
    SET m.col1 = 1 
    WHERE m.id IN (SELECT id From Table2 where other_id = m.other_id) 
ELSE 
    SET all remaining to 0 
UPDATE Table1 m SET m.col1 = 0 

因此,所有我想要的是,如果$数为0的所有记录为0,如果$数量> 0,则该数量行需要在表1 注意要设置1:记录需要最后一个记录DESC ID限$数

编辑: 为了更好的社区就是我需要的是,这我怎么会成功地与PHP和SQL,但我完成它将需要运行2个单独的查询。

见PIC

正如你看到我使用两个单独的查询我在想,如果它可以只用SQL来完成。 enter image description here

+3

编辑您的问题,并提供样本数据和所需的结果。 –

回答

0

您可以使用相关子查询做到这一点:

update Table1 m 
    set m.col1 = case 
    when exists(select 1 from Table2 where other_id = m.other_id) 
     then '1' 
     else '0' 
    end 

我不知道如果表走样Table1 m与MySQL的作品。我知道它不适用于SQL服务器。所以,你可能需要将它这样写:

update Table1 
    set col1 = case 
    when exists(select 1 from Table2 m2 where m2.other_id = Table1.other_id) 
     then '1' 
     else '0' 
    end 

的技巧是,你使用case when ... then ... else ... end结构。相关的子查询位于when ...部分。它会检查Table2中是否存在相关行。

您也可以尝试使用update-with-join技巧,因为速度更快。不幸的是,我不能用我的SQL服务器来尝试,因为它具有不同的语法。它看起来像这样:

UPDATE Table1 m 
LEFT JOIN Table2 m2 on (m.other_id = m2.other_id) 
SET m.col1 = CASE WHEN m2.other_id IS NULL THEN 0 ELSE 1 END