Mysql根据2个其他记录值更改单元格值

时间:2014-01-28 22:59:24

标签: mysql sql

我有一个像这样的数据库

表名:人

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,我会更新所有person.id并且HIV'已清除' 请注意我需要能够选择标记孩子的单词,因此这与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

2 个答案:

答案 0 :(得分:3)

这是更新声明:

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);

答案 1 :(得分:1)

试试这个:

Select p.id
From person p
INNER JOIN person father ON father.id = p.father_id 
INNER JOIN person mother ON mother.id = p.mother_id
WHERE father.HIV = 'Clear' AND mother.HIV = 'Clear'

然后使用这些ID进行UPDATE查询:

UPDATE person SET HIV = 'Clear' WHERE id IN (the result set of ids separated by commas)