【问题标题】:DELETE query giving "operand should contain 1 column" errorDELETE 查询给出“操作数应包含 1 列”错误
【发布时间】:2015-08-29 06:19:39
【问题描述】:

我需要从我的数据库中删除一些特定的重复项。我创建了一个查询来查找我需要的记录,但是当它作为子查询运行时,我收到错误“operand should contain 1 column”我不知道如何在只选择一个列时获取我需要的特定信息。

查询是:

delete
from products
where id in (SELECT *
FROM products
GROUP BY part_number
 HAVING count(*) > 1 and manufacturer_id="4146"
)

知道如何让它工作吗?

【问题讨论】:

  • select * 替换为select id_column。并且请不要将数字放在双引号中。
  • 感谢您的提示。不幸的是,这给出了响应:错误代码:1093。您不能在 FROM 子句中指定目标表“产品”进行更新

标签: mysql subquery sql-delete


【解决方案1】:

在您的子查询中,您需要选择 id 一列

delete
from products
where id IN (SELECT id
FROM products
WHERE manufacturer_id="4146" 
GROUP BY part_number
 HAVING count(*) > 1
)

从同一个表中获取 id 也会给你另一个错误无法指定目标表你需要为你的子查询提供新的别名

delete
from products
where id IN 
(SELECT t.id FROM (
(SELECT id
FROM products
WHERE manufacturer_id="4146" 
GROUP BY part_number
 HAVING count(*) > 1 ) t
)

【讨论】:

  • 这给出了错误:错误代码:1054。“有条款”中的未知列“制造商 ID”
  • 感谢您的帮助@M Khalid Junaid。这里的问题是子查询拉出一个空集。 products 表中不会有任何匹配的 ID。也许如果我用简单的英语把我想要完成的事情写出来。首先,我想获取计数超过 1 的所有部件......在这些部件中,我只想删除那些制造商 ID 为 4146 的部件。所以我会写这两个查询,例如:Select part_number from products where count(part_number) > 1 和那个设置select part_number where manufacturer id='4146' 但如何将它们捆绑到删除查询中?
  • @user116694 指的是这个thread
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2013-10-04
相关资源
最近更新 更多