我有一个像这样的数据库
表名:人
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
答案 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)