首页 > 解决方案 > 根据其他表中的列更新列

问题描述

伙计们!

我对编程相当陌生,我正在尝试编写一个引用两个单独表的 SQL 语句 - 组织和用户。我一直在寻找答案,但我找不到任何有效的答案。

该语句的目的是仅在满足以下 2 个条件时更新用户的状态;

UPDATE User AS u 
SET u.isActivated =
CASE 
    WHEN (
        SELECT o.isApproved
        FROM Organisation AS o
        WHERE o.organisationId = (
             SELECT u.organisationID
             FROM User AS u
             WHERE u.email = " + email +"))
        = 'true' THEN 'true'
    ELSE 'false'
WHERE u.email = " + email + "
AND u.password = " + password + " 
AND u.activationCode = " + activationCode + ";

标签: sqlpostgresqlsql-update

解决方案


UPDATE 语句中使用 FROM 连接表:

UPDATE  User AS u 
SET     u.isActivated   = (o.isApproved = TRUE) -- will be TRUE or FALSE
FROM    
    Organisation AS o
WHERE   
    u.organisationID    = o.organisationId
AND u.email             = " + email + "
AND u.password          = " + password + " 
AND u.activationCode    = " + activationCode + ";

离题,但非常重要:这段 SQL 闻起来像是 SQL 注入的机会,您正在创建一个将作为 SQL 执行的字符串。我真的希望您能控制自己的安全性并使用安全的方法将变量放入 SQL 中


推荐阅读