【问题标题】:UPDATE a table based on a linked TABLE using a JOIN使用 JOIN 更新基于链接表的表
【发布时间】:2016-02-11 16:23:49
【问题描述】:

我想根据链接表baby 更新parent 的字段。如果任何链接的婴儿有baby.optin = 1,则需要将parent.optin 值设置为1

这是我目前正在尝试为一位父母(ID 为 11)运行查询的查询

UPDATE parent p
INNER JOIN baby b
    ON p.id = b.parent_id
    AND b.optin = 1
SET p.optin=b.optin
WHERE p.id = 11

父母有 2 个孩子,一个选择加入,一个没有。目前我的查询没有将 p.optin 设置为 1。

示例数据:

父母

+----+-------+-------+
| id | name  | optin |
+----+-------+-------+
| 11 | dave  | 0     |
+----+-------+-------+

宝贝

+----+-----------+---------+-------+
| id | parent_id | name    | optin |
+----+-----------+---------+-------+
| 2  | 1         | jane    | 0     |
| 3  | 1         | freddie | 1     |
+----+---------------------+-------+

有了上面的数据,我想把 Parent.optin 的值设置为 1,因为 freddie 有 optin 1。如果 freddie 的 optin 值为 0,那么 parent.optin 也将是 0。

【问题讨论】:

  • 如果any 相关行是baby.optin = 0,您的意思是要忽略(不更新)还是仅在all 时才忽略(不更新) i> 相关baby.optin = 0?如果您包含两个表中的一些示例行,以及修改后的parent 表将遵循UPDATE 的示例,将会有很大帮助。
  • @MichaelBerkowski 我用示例行更新了我的问题,希望更有意义。

标签: mysql join sql-update


【解决方案1】:

我想你试试这个。如果您没有解决您的错误,请告诉我。

UPDATE parent p, baby b
INNER JOIN baby b ON p.id = b.parent_id
SET p.optin=b.optin
WHERE p.id = 11 AND b.optin = 1

谢谢。

【讨论】:

  • 那也行不通。实际上,该查询与我尝试的查询不一样吗?将b.optin = 1从 INNER JOIN 移动到 WHERE 有什么不同吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2014-09-12
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多