【问题标题】:Sub Query delimite in mysqlmysql中的子查询分隔符
【发布时间】:2017-05-17 22:27:05
【问题描述】:

我正在尝试更新名为 product_category_parent 的表的字段(例如 parent_id)。

这是我尝试使用的查询:

update sub_category_child set name='Mobile Phones', parent_id = (select parent_id from product_category_parent where cname = 'Appliances')

但它返回以下错误

#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“)”附近使用正确的语法

这是数据库架构

table product_category_parent
id              cname
-----          ----------
1              Electronics

table sub_category_child
id         name        parent_id
-----      --------    -------------
1          Mobile Phone   1

parent_id 作为 product_category_parent.id 的外键

【问题讨论】:

  • describe相关表格。
  • 好的,让我编辑问题
  • select parent_id from product_category_parent where cname = 'Appliances' 是否产生超过 1 条记录?第二。您希望 Sub_category_Child 中的所有记录的名称为“Mobile Phones”,其 parent_ID 等于 product_Category_parent 中的父 ID,其中 cname = 'Appliances'?
  • 是的,它确实产生了超过 1 条记录
  • 哎呀我的错我只想让一行受影响,这会改变产品ID

标签: mysql database mariadb


【解决方案1】:

首先,您可能想要父表中的id,而不是父表中的parent_id,对吧?

UPDATE sub_category_child 
SET name = 'Mobile Phones', 
parent_id = (SELECT id FROM product_category_parent WHERE cname = 'Appliances')

其次,通过此查询,您将更新sub_category_child 表中的所有记录。这是您想要的,还是您缺少WHERE 子句?

第三,如果子查询返回多于1条记录,你就有问题了。 你不想选择使用哪一个来更新(例如ORDER by xx LIMIT 1),或者更有可能 - 出了点问题。 我假设sub_category_child 中的每一行都应该只有一个父级,那么找到Mobile Phones 类别的父级的真实条件是什么?

【讨论】:

  • 他遇到了语法错误。更改列名不会解决这个问题。
  • 是的,我缺少 where 子句,我只希望一行更新其父 ID。
  • 我尝试了您的查询,但仍然收到语法错误 #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“)”附近使用正确的语法
  • 嘿,我刚刚尝试使用 php 和 mysqli 运行上面的查询,效果很好,但是在 phpmyadmin sql 查询中它返回一个语法错误,你能向我解释一下吗?我很困惑。
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 2021-06-25
  • 2017-08-28
相关资源
最近更新 更多