这应该是微不足道的,但我会绕圈子,也许有人可以提供帮助。
我有两个表(T1,T2),我希望从中提取每行中的多个值并更新第三个表(T3)的内容iff(当且仅当)T1中的两个UQ,NN字段,T2匹配,在这种情况下,我想在T1,T2的相应行中添加一些值,并将它们放在T3中,并将其他一些值复制到T3。
要求和的字段都声明为DECIMAL。
简化和伪代码(以避免做出太多假设):
SELECT T1.a,T1.b,T1.c from T1
SELECT T2.d, T2.e from T2
UPDATE T3.col1=a, T3.col2=b, T3.col3 = (value of(T2.c) + value of(T2.e)) iff T1.a = T2.d
各种尝试均未奏效。
我在Ubuntu 12.10上运行MySQL Workbench 5.2.37
以下评论中的示例:
UPDATE Test_join as T3
SELECT GZHident, Magnitude_1 from GZHTableExtended3 as T1
SELECT AHZid, DM from AHZDMConversionTable as T2 JOIN T2,T1
ON T1.GZHident = T2.AHZid
SET T3.AHZid = T1.GZHident
SET T3.DM = T2.DM
SET T3.Abs_Magnitude_1 = T1.Magnitude_1 + T2.DM;
答案 0 :(得分:0)
MySQL支持使用JOIN语法的多表UPDATE,就像SELECT一样。这不是标准的ANSI SQL,但它对这些类型的情况非常有用。
示例:
UPDATE T1
JOIN T2 ON T1.a = T2.d
JOIN T3 ON ...???...
SET T3.col1=T1.a,
T3.col2=T1.b,
T3.col3 = T2.c + T2.e;
您的问题中没有足够的信息让我猜测如何加入T3。
感谢您发布示例UPDATE查询。但目前尚不清楚如何更新T3。您提供的示例查询根本不是有效的SQL代码。我建议你阅读有关SQL编程的教程。
您似乎在UPDATE和INSERT之间感到困惑?请记住:
我猜你的措辞,但也许你想添加新的行。你可以这样做:
INSERT INTO Test_join (AHZid, DM, Abs_Magnitude)
SELECT T1.GZHident, T2.DM, T1.Magnitude_1 + T2.DM
FROM GZHTableExtended3 as T1
JOIN AHZDMConversionTable as T2 JOIN T2
ON T1.GZHident = T2.AHZid;