通过连接两个表来更新第三个表

时间:2016-04-19 15:18:34

标签: mysql sql select sql-update

我想更新第三个表" temp_table1"通过对其他两个表执行一些操作" temp_table" "资源1"

temp_table:

+-----------+
| temp      | 
+-----------+
|  0.46574  | 
+-----------+

资源1:

+------------------+
| evaluation_value |
+------------------+
|         0.23     | 
|         0.56     |
|         0.76     |
|         0.25     |
|         0.79     |
+------------------+

temp_table1:

+-----------+
| temp      | 
+-----------+
|    0      | 
+-----------+

现在,我想从" temp_table"中减去临时值。来自" resource1"的所有evaluation_value;并在" temp_table1"中保存小于0.25的减去值。我想更新" temp_table1"每次我运行查询。

我为此构建了以下查询,但我在某处出错:

update temp_table1 t1
set t1.temp = (
    select (e.evaluation_value - t.temp) < 0.25
    from resource1 e
    Inner join temp_table t)

谢谢!!!

1 个答案:

答案 0 :(得分:0)

每次运行查询时,都应清除现有值,然后填充新值:

TRUNCATE TABLE temp_table1
GO

INSERT INTO temp_table1
SELECT
    e.evaluation_value - t.temp
FROM temp_table t
    CROSS JOIN resource1 e
WHERE (e.evaluation_value - t.temp) < 0.25

那是因为UPDATE只更改当前现有行中的数据,而这不是您的意图 - 您希望每次都获得新结果。此外,每次运行的行数可能会有所不同,因此UPDATE不适合这里。

另一个问题是您选择的JOIN类型:INNER用于从一个表中的记录到另一个表的记录严格映射的情况(如两个表中都存在的ID)并且它要求您使用ON关键字指定映射,而CROSS只是将第一个表中的所有内容与另一个中的所有内容连接起来,就像您希望的那样(因此,不需要映射)。 / p>