sql - 根据其他表中的列更新列
问题描述
伙计们!
我对编程相当陌生,我正在尝试编写一个引用两个单独表的 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 + ";
解决方案
在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 中
推荐阅读
- python - 下载后如何在colaboratory环境下解压到指定文件夹中的文件?
- sql - Oracle 数据库错误:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小
- php - ajax jquery复选框值重复
- regex - 正则表达式可变长度后向通配符
- java - 在 JUnit Jupiter 中使用自定义组合注释时为 @Autowired bean 获取 NPE
- regex - 如何匹配此字符串中的一个或两个连续(并将它们分组)数字:-4-45- 或 -15-25-03-
- c# - 为选定的搜索条件创建动态表达式树
- angular - 将 Angular 7 应用程序代理到在不同端口上运行的后端端点
- linux - 在 linux bash 中删除文件的简单脚本
- php - 将子查询结果集限制为最后一条记录