【问题标题】:Mysql how to update multiple records without specifying foreignkey valueMysql如何在不指定外键值的情况下更新多条记录
【发布时间】:2020-07-06 00:47:09
【问题描述】:

我有一个如下所示的表格:

Table - order
id purchase_order_item_id amount
1  1324                   0.0
2  2435                   50.2
3  5643                   87.2
4  6475                   0.0

Table - purchase_order_item
id                     item_id
1324                   82
2435                   83
5643                   84
6475                   85

Table - item
id                     amount
82                   76.1
83                   50.2
84                   87.2
85                   65.9

现在我想检查 Order 表的金额是否为 0.0。在这种情况下,我必须从表项(Order->purchase_order_item->item)中获取金额数据并在订单表中更新。

我在下面写了没有运行的更新查询。正在尝试纠正它。

UPDATE order
INNER JOIN purchase_order_item ON purchase_order_item.id =     order.purchase_order_item_id
SET 
order.amount= 
(
SELECT item.amount from item
INNER JOIN purchase_order_item ON purchase_order_item.item_id=item.id
)
where order.amount=0.0;

我是 mysql 查询的新手,正在尝试编写正确的更新查询。

【问题讨论】:

  • 用它们的 CREATE TABLE 脚本替换表结构描述。提供一些示例数据作为 INSERT INTO 脚本。将此示例数据的所需结果显示为表格格式的文本。
  • table2 和 table3 之间通过外键链接了哪些确切的列?用一个清晰​​的例子重写你的问题并提供示例数据。
  • @t1f 表 T1 中存在一个将 T1 与 T2 链接起来的外键。
  • T2.t2id 不是有效的列名请添加创建表脚本。(show create table )
  • 您对提供创建表脚本有什么反感吗?投票结束。

标签: mysql sql join sql-update


【解决方案1】:

我认为你想要update ... join 语法:

update orders o
inner join purchase_order_items poi on poi.id = p.purchas_order_item_id
inner join items i on i.id = poi.item_id
set o.amount = i.amount
where o.amount = 0

旁注:order 是 MySQL 中的保留字(与其他数据库一样),因此我将表重命名为 orders(我也将其他表名复数以使其保持一致)。

【讨论】:

  • Err ORDER 是保留字,需要反引号。
  • @P.Salmon:我通常认为表名是假设性的,但可以肯定你是对的。我修改了答案。
  • @GMB 您的查询没有给出任何错误,但它不会更新记录。我收到消息。 # MySQL 返回一个空结果集(即零行)。
  • @GMB 虽然我收到了消息。 # MySQL 返回了一个空结果集(即零行),但是当我查看表字段值时,它实际上会更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
相关资源
最近更新 更多