我在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
我想你可能需要这个查询:
update item i
set i.brandid =
(select t.taxonomyid
from taxonomy t
join brand b
on t.taxonomyname = b.brandname
and t.companyid = b.companyid
where b.brandid = i.brandid)
要在进行更新之前进行测试,请尝试运行以下命令,以说明将更改的内容:
select t.taxonomyid as new_id_to_be_given,
b.brandid as old_id_going_away,
t.taxonomyname,
t.companyid
from taxonomy t
join brand b
on t.taxonomyname = b.brandname
and t.companyid = b.companyid
order by 1
这将用与两个表之间相同的(taxonomyname和brandname)和(companyid和companyid)值相关联的taxonomyid值替换item表上的品牌。
如果这个查询仍然返回2+行,这意味着TAXONOMY或BRAND表有不止一行用于taxonomyname和companyid的唯一组合。
要诊断可能发生这种情况的地方,您可以运行以下命令(然后在解决问题后,您可以运行上述命令):
select 'taxonomy' as table_with_issue,
taxonomyname,
companyid,
group_concat(taxonomyid separator ', ') as multiple_ids
from taxonomy
group by taxonomyname, companyid
having count(*) > 1
union all
select 'brand', brandname, brandid, group_concat(brandid separator ', ')
from brand
group by brandname, brandid
having count(*) > 1
子查询返回多于1行表示任意一个Select语句返回多于1行。
i.brandId不能设置多个值。有一件事你可以尝试将添加限制1:
UPDATE item i
SET i.brandId = (SELECT t.taxonomyId
FROM taxonomy t
WHERE t.taxonomyName = (SELECT distinct b.brandName
FROM brand b
WHERE b.brandId = i.brandId
AND b.companyId = 9 limit 1)
AND t.taxonomyType = 'brand'
AND t.companyId = 9 limit 1)
WHERE i.companyId = 9
但我会尝试找出如何添加一些东西到where子句,以确保您只返回一行。