2014-11-08 80 views
0

在我Mysql数据库中,我有数据,像下面基于其他更新结果有条件更新行

id | id_fk | name | address | city | priority | status | 
-------------------------------------------------------------- 
1 | 1  | name1 | address1 | city1 |   | active | 
2 | 2  | name2 | address2 | city2 | primary | active | 
3 | 1  | name3 | address3 | city3 | primary | active | 
4 | 1  | name4 | address4 | city4 |   | active | 
5 | 1  | name5 | address5 | city5 |   | active | 
6 | 3  | name6 | address6 | city6 | primary | active | 
-------------------------------------------------------------- 

这里的表,id是行ID,id_fk是从另一个表的参考。 status是数据状态。如果数据被删除,那么它将是deleted。而priority是供参考的默认地址。

我的问题是,

如果我id = 3删除该地址,然后将不会有任何优先地址“id_fk = 1”。我想将'id = 3'的状态更改为deleted,并将其他地址中任何一个'id_fk = 1'的priority设置为primary

简单UPDATE查询不会这样做。有没有办法做到这一点?预先感谢。

+0

我已经试过这样做,用的情况下,当语句和if语句,但未能:( 目前最好的答案我可以给你的是使用2个更新查询(如果第一个更改了一行,将另一行更新为状态'primary') – iLot 2014-11-08 13:58:02

回答

1

有一种方法有两个UPDATE查询做到这一点:

UPDATE myTable SET status = 'deleted' WHERE id = 3 
; 
UPDATE myTable as a, 
(SELECT id_fk, max(id) 
    FROM myTable 
    WHERE id_fk = 1 
    AND status NOT IN ('deleted') 
    GROUP BY id_fk 
) as b 
SET a.priority = 'primary' 
WHERE a.id_fk = 1 
AND a.id = b.id 
+0

你已经混淆了优先级和状态几次,应该是'SET status ='被删除''和 '和状态不在('删除')'(或'AND状态!='已删除') 除此之外,我认为这应该是答案; – iLot 2014-11-08 14:10:12

+1

叶普,你是对的。评论的nks,我更新了我的答案。 – Benvorth 2014-11-08 14:17:04