【发布时间】:2014-09-14 00:05:53
【问题描述】:
我是 MySQL 的新手,所以我希望你能帮助我,因为我在任何地方都找不到与我的问题相关的答案。 我试图用另一个表中的信息更新 MySQL 表中的字段,到目前为止我有这样的东西:
UPDATE item i
SET i.brandId = (SELECT t.taxonomyId
FROM taxonomy t
WHERE t.taxonomyName = (SELECT b.brandName
FROM brand b
WHERE b.brandId = i.brandId
AND b.companyId = 9)
AND t.taxonomyType = 'brand'
AND t.companyId = 9)
WHERE i.companyId = 9
基本上我有一个名为brand 的旧表并将其所有信息复制到一个名为taxonomy 的新表中,两个表之间的唯一区别是ID(其他一切都保持不变),所以我需要更新所有item 表中的 brandId 字段从 brand 到 taxonomy 以便我可以保留更新 ID 的名称。
我的查询的问题是我收到一条错误消息:子查询返回超过 1 行
谢谢!
编辑:
表格结构是:
brand
brandId - brandName - companyId
item
itemId - itemName - brandId - companyId
taxonomy
taxonomyId - taxonomyName - companyId
【问题讨论】:
-
在您的更新中使用 select 语句执行 select *(将 select t.taxonomyid 更改为 select *),为什么会返回超过 1 行?列在哪里不同?当您弄清楚这一点时,您应该能够修复查询。
-
有没有办法可以用 SELECT 替换 UPDATE 以便在不更新表的情况下查看返回的内容?
-
是的,从更新中取出 select 查询(取出 () 中包含的所有内容并运行它(只是 select 语句),但就像我说的那样做一个 select * 以便您可以看到什么列值重复与不重复
-
看看我在下面的回答,但我认为您可能会遇到问题,因为在 BRAND 或 TAXONOMY 中,(TAXONOMYNAME 和 COMPANYID)或(BRANDNAME 和 COMPANYID)组合具有 2 个以上的唯一 ID。这些表有什么限制吗?
-
since I couldn't find any related answer to my problem anywhere.这很难想象,因为我在 SO 上找到了数百个相关问题和答案,以解决 MySQL 中的错误。我无法想象如果我在互联网上搜索会获得多少点击量。
标签: php mysql sql join sql-update