基于另一个表的 SQL 更新
Posted
技术标签:
【中文标题】基于另一个表的 SQL 更新【英文标题】:SQL update based off another table 【发布时间】:2018-03-29 08:37:57 【问题描述】:我已经浏览了几篇帖子,但无法理解如何在 PostgreSQL 中实现以下目标
Table 1
---------
USER_ID NAME
1 User
2 Test
Table 2
--------
USER_ID WIDGET_ID WIDGET_CONFIG
1 1 abc
1 2 def
2 1 abc
2 2 def
我有两张桌子,我需要的是
从表 1 中选择,其中用户名 = "Test" 使用该 ID (2) 选择 USER_ID 为 2 且 WIDGET_ID 为 2 的小部件 例如将 widget_config 更新为“ghi”我一直在使用 WITH 语句让自己陷入困境,也许是完全错误的方式
WITH res AS (
SELECT agent_id FROM tbl_agent WHERE agentlogin_id='2man'
)
SELECT tbl_agentwidgetconfig
WHERE agent_id=res.agent_id AND widget_id=5;
// Update record code?
如果有人能阐明执行此操作的正确方法,将不胜感激!
【问题讨论】:
POSTGRESQL 和 mysql 不一样 为什么你都标记了? 同时指定预期结果。 一个简单的 JOIN 可能就是你想要的。 @jarlh 结果只是指定记录的更新,示例会很有帮助 所以你有 两个 表。我数了三个,有 五个 不同的名称:table1,table2, tbl_agent, widget_config,tbl_agentwidgetconfig 【参考方案1】:类似的东西
UPDATE tbl_agentwidgetconfig
SET widget_config='hij'
WHERE agent_id=any(
SELECT agent_id FROM tbl_agent
WHERE agent_loginid='2man')
AND widget_id=5;
【讨论】:
【参考方案2】:我认为你在描述这样的事情?
UPDATE
aw
SET
WIDGET_CONFIG = 'ghi'
FROM
tbl_agent a
INNER JOIN tbl_agentwidgetconfig aw ON aw.USER_ID = a.USER_ID
WHERE
a.NAME = 'Test'
AND aw.WIDGET_ID = 2;
【讨论】:
这对 Postgres 无效【参考方案3】:您也可以通过子查询来做到这一点:
UPDATE table2
SET WIDGET_CONFIG = 'ghi'
WHERE WIDGET_ID = 2 AND USER ID = (SELECT USER_ID FROM table1 WHERE NAME = 'Test');
【讨论】:
以上是关于基于另一个表的 SQL 更新的主要内容,如果未能解决你的问题,请参考以下文章