【问题标题】:Updating column based on columns from other table根据其他表中的列更新列
【发布时间】:2021-02-11 08:35:56
【问题描述】:

伙计们!

我对编程相当陌生,我正在尝试编写一个引用两个单独表的 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 + ";

【问题讨论】:

  • 您是否在条件中使用参数?

标签: sql postgresql sql-update


【解决方案1】:

使用UPDATE statement中的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 中

【讨论】:

  • 非常感谢您的快速回复!当我尝试这个时,我会给出更新。而且,非常感谢你的建议,弗兰克!我希望你有一个愉快的一周!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多