【问题标题】:SQL update based off another table基于另一个表的 SQL 更新
【发布时间】: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}

标签: sql postgresql join sql-update


【解决方案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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      相关资源
      最近更新 更多