簡體   English   中英

MySQL Update來自另一個表的連接信息

[英]MySQL Update joining information from another table

我在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字段從brandtaxonomy所以我可以保留用於更新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

這將用與兩個表之間相同的(分類名稱和品牌名稱)和(companyid和companyid)值關聯的分類標准值替換項目表上的商標。

如果此查詢仍返回2+行,則表示TAXONOMY或BRAND表具有多於一行的分類名稱和公司ID的唯一組合。

要診斷可能在哪里發生,可以運行以下命令(然后在解決問題后運行上面的命令):

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語句返回的行多於一條。

您不能將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子句中添加一些內容,以確保只返回一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM