我有一个像这样的数据库

表名:人

id  name    country father_id     mother_id   HIV
52  bob     NULL    68            98          NULL
68  joe     Maui    72            14          CLEAR
53  mia     NULL    68            98          NULL
51  robbie  NULL    68            13          NULL
98  Joyce   NULL    13            16          CLEAR


我需要查询我的数据库,如果mother_id和father_id都具有HIV CLEAR,则我将用HIV'CLEARED'更新所有person.id
请注意,我需要能够选择标记孩子的单词,因此该值将与mother_id和Father_id相同。

我需要数据库看起来像这样:

    id  name    country father_id     mother_id   HIV
    52  bob     NULL    68            98          CLEAR
    68  joe     Maui    72            14          CLEAR
    53  mia     NULL    68            98          CLEAR
    51  robbie  NULL    68            13          NULL
    98  Joyce   NULL    13            16          CLEAR


如果这太复杂了,那就不要使用与父母相同的值:P

如果不清除mother_id和father_id,我希望person.id HIV细胞保持为空

请保持简单,因为我是菜鸟:P

最佳答案

这是更新语句:

update person p join
       person father
       on father.id = p.father_id and father.HIV = 'Clear' join
       person mother
       on mother.id = p.mother_id and mother.HIV = 'Clear'
    set p.HIV = 'ParentsClear';


令我惊讶的是,您可能只想在该字段为空时执行update。如果是这样,请在查询中添加where p.HIV is null

编辑:

我建议您修改表以包含ParentHIV字段。我不知道您在做什么,但是有可能对个人的数据和父母的数据感到困惑。

这是如何使用此示例:

update person p join
       person father
       on father.id = p.father_id and father.HIV = 'Clear' join
       person mother
       on mother.id = p.mother_id and mother.HIV = 'Clear'
    set p.ParentHIV = (case when father.HIV = 'Clear' and mother.HIV = 'Clear'
                            then 'BothClear'
                            when father.HIV = 'Clear' or mother.HIV = 'Clear'
                            then 'OneClear'
                            else 'NeitherClear'
                       end);

关于mysql - MySQL基于其他2条记录值更改单元格值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21418758/

10-11 16:52