Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果属性值包含在另一个表中,如何更新表?_Sql_Postgresql_Sql Update_Exists - Fatal编程技术网

Sql 如果属性值包含在另一个表中,如何更新表?

Sql 如果属性值包含在另一个表中,如何更新表?,sql,postgresql,sql-update,exists,Sql,Postgresql,Sql Update,Exists,我有一个这样的数据库: 我试图创建一个查询,使我能够在izvještajšu tabora表中包含所有这三个属性(tabor_Vatrogasi、tabor_policija和tabor_hitna)的值作为oznaka_tabora属性的值时,更新incident表中status属性的值。例如,如果taborêVatrogasi、taborêpolicija和taborêhitna属性的值分别为3、4和5,则当且仅当izvještajêtabora表中包含3、4和5时,应更新事件表 这是我尝试

我有一个这样的数据库:

我试图创建一个查询,使我能够在izvještajšu tabora表中包含所有这三个属性(tabor_Vatrogasi、tabor_policija和tabor_hitna)的值作为oznaka_tabora属性的值时,更新incident表中status属性的值。例如,如果taborêVatrogasi、taborêpolicija和taborêhitna属性的值分别为3、4和5,则当且仅当izvještajêtabora表中包含3、4和5时,应更新事件表

这是我尝试过的,但没有成功:

UPDATE incident SET status='Otvoren' FROM tabor,izvjestaj_tabora
WHERE (incident.tabor_policija=tabor.oznaka
OR incident.tabor_vatrogasci=tabor.oznaka
OR incident.tabor_hitna=tabor.oznaka)
AND izvjestaj_tabora.oznaka_tabora=tabor.oznaka
AND rezultat_izvjestaja='Riješen' AND
((SELECT EXISTS(SELECT DISTINCT oznaka_tabora FROM izvjestaj_tabora)
WHERE oznaka_tabora=incident.tabor_policija) OR tabor_policija=NULL) AND
((SELECT EXISTS(SELECT DISTINCT oznaka_tabora FROM izvjestaj_tabora)
WHERE oznaka_tabora=incident.tabor_vatrogasci) OR tabor_vatrogasci=NULL) AND
((SELECT EXISTS(SELECT DISTINCT oznaka_tabora FROM izvjestaj_tabora)
WHERE oznaka_tabora=incident.tabor_hitna) OR tabor_hitna=NULL);
有人知道如何做到这一点吗?

发生意外事件。奥兹纳卡是关键,你需要所有三个方面都有关联才能让活动开始,我是斯洛文尼亚人,这就是我理解的原因

UPDATE incident
SET status='Otvoren' 
WHERE oznaka in (
    SELECT DISTINCT i.oznaka
    FROM incident i
        INNER JOIN izvještaj_tabora t1 ON i.tabor_vatrogasci = t1.oznaka_tabora
        INNER JOIN izvještaj_tabora t2 ON i.tabor_policija = t2.oznaka_tabora
        INNER JOIN izvještaj_tabora t3 ON i.tabor_hitna = t3.oznaka_tabora
    WHERE t1.rezultat_izvjestaja='Riješen' AND t2.rezultat_izvjestaja='Riješen' AND t3.rezultat_izvjestaja='Riješen'
    )
根据您的描述,查询应如下所示:

更新事件一 设置状态='Otvoren' 其中tabor_policija为NULL或 存在 从izvjestaj_tabora t中选择1 其中t.oznaka_tabora=i.tabor_policija tabor_vatrogasci为空或 存在 从izvjestaj_tabora t中选择1 其中t.oznaka_tabora=i.tabor_vatrogasci tabor_hitna为空或 存在 从izvjestaj_tabora t中选择1 其中t.oznaka_tabora=i.tabor_hitna 但是,我想知道为什么连接表tabor与操作无关

除此之外,你还受到了两种普遍存在的误解的影响:

一,

tabor_=NULL 此表达式将导致NULL。由于NULL被认为是未知的,如果将其与任何东西进行比较,结果也是未知的。我引述:

不要写入表达式=NULL,因为NULL不等于NULL。 空值表示未知值,它是未知的 两个未知值是否相等

二,

存在选择不同的oznaka_tabora从。。。
在半联接中,选择项是完全不相关的。我改用select1。正如这个术语所暗示的,只有存在是被检查的。表达式返回TRUE或FALSE,选择项将被忽略。在那里添加一个独特的子句是毫无意义的。

您能更具体地说明一下没有起作用吗?@Quassnoi:更新没有起作用,因为至少有一个子查询的结果等于false。谢谢。现在我尝试在属性tabor_vatrogasci、tabor_policija、tabor_hitna的值可能等于NULL时应用它。在这种情况下,我该如何写下来?谢谢你提供了非常详细的答案。是的,确实如此。再次感谢。