我是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(其他一切保持不变),所以我需要将表格brandId
中的所有item
字段从brand
更新为taxonomy
,以便我可以保留更新ID的名称。
我的查询出现的问题是我收到一条错误消息:子查询返回超过1行
谢谢!
编辑:
表结构是:
brand
brandId - brandName - companyId
item
itemId - itemName - brandId - companyId
taxonomy
taxonomyId - taxonomyName - companyId
答案 0 :(得分:1)
我想你可能想要这个查询:
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
这将替换item表上的brandid,其中taxonomyid值与2个表之间的相同(taxonomyname和brandname)和(companyid和companyid)值相关联。
如果此查询STILL返回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 :(得分:0)
子查询返回多于1行意味着任何一个Select语句都返回多行。
您无法将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子句中添加一些内容,以确保只返回一行。