如何根据MySQL中所有三个表中的字段从另一个表中更新一个表

时间:2019-05-24 20:31:51

标签: mysql

我尝试将一个表中的数据合并到另一个表中,并且需要从第三个表中检索数据。如何根据T1中的数据从T2中的T3中插入数据?

我有三个表:

  

T1 :pd_id,default_cat_id,文章
   T2 :id_category,art_no,origin_desc,origin_code,origin_ref
   T3 :pd_id,id_lang,new_desc,new_code,new_ref

T3需要更新,列中的特定字段为:new_desc,new_code,new_ref:

  • 使用来自T2的字段中的数据:origin_desc,origin_code,origin_ref
  • 其中t2.art_no匹配t1.article,而t2.id_category匹配t1.default_cat_id
  • 这仅在t1.pd_id与t3.pd_id匹配且t3.id_lang等于'2'的情况下。

图中所示: T1, T2, T3 and the desired result in T3

我尝试使用JOINS进行服务器操作,但无法获取。

MySQL
UPDATE t3 
INNER JOIN t1 ON (
    t1.article=t2.art_no 
    AND t1.default_cat_id=t2.id_category 
    AND t1.pd_id=t3.pd_id
)
INNER JOIN t2 ON (
    t2.origin_desc=t3.new_desc
    AND t2.origin_code=t3.new_code
    AND t2.origin_ref=t3.new_ref
    AND t2.art_no=t1.article
    AND t2.id_category=t1.default_cat_id
)
SET 
t2.origin_desc=t3.new_desc,
t2.origin_code=t3.new_code,
t2.origin_ref=t3.new_ref
WHERE
t2.art_no=t1.article 
AND t2.id_category=t1.default_cat_id 
AND t3.id_lang=2;
  

#1054-子句表中的未知列't2.art_no'

2 个答案:

答案 0 :(得分:0)

您在这里进行一些奇怪的连接。
开始时,您将t3t1连接在一起,但是ON子句包含:

t1.article=t2.art_no 
AND t1.default_cat_id=t2.id_category 

t2.art_not2.id_category在语句的这一点不存在,因为t2还不存在。
稍后会介绍,但目前不存在。
因此,您不能同时使用t2的列。
也许删除这些行,因为我发现它们也存在于WHERE子句中。
您还说过您想更新表t3,但这些行:

SET 
t2.origin_desc=t3.new_desc,
t2.origin_code=t3.new_code,
t2.origin_ref=t3.new_ref

更新表t2的列。
他们应该是:

SET 
t3.new_desc=t2.origin_desc,
t3.new_code=t2.origin_code,
t3.new_ref=t2.origin_ref

还是其他?

答案 1 :(得分:0)

感谢@forpas-这是正确方向的提示。

我现在已经修剪了代码,它可以正常工作,现在看起来像这样:

MySQL
UPDATE t3 
INNER JOIN t1 ON (
    t1.pd_id=t3.pd_id
)
INNER JOIN t2 ON(
t2.art_no=t1.article
)
SET 
t3.new_desc=t2.origin_desc,
t3.new_code=t2.origin_code,
t3.new_ref=t2.origin_ref
WHERE
t2.id_category=t1.default_cat_id 
AND t3.id_lang=2;