SQL Update使用同一表中其他列的值

时间:2015-03-16 19:44:32

标签: mysql sql sql-server laravel

我有一个SQL表,“data”,包含以下列: id(int), date1(datetime), date2(datetime), 差异(浮动)

我想要做的是更新此表,以便“差异”列包含date2和date1之间的年份差异(作为浮点数),仅当date2不等于'0000-00-00 00时: 00:00'

我正在考虑一些事情

Update data m
SET difference = datediff("hh",m.date2, m0.date1)/8765 --there are 8765 hours per year so this should give me my float
FROM data m0
WHERE m.id = m0.id
AND m.date2 <> '0000-00-00 00:00:00';

然而,当我尝试这个时,我收到一条错误,指出“SQL语法错误。请检查您的MySQL服务器版本以获取正确的语法,以便使用近似数据SET difference = datediff(”hh,m.date2,m0.date10 / 8765) 'd'在第1行“

如何修改我的sql语句以获得所需的结果?

编辑:

我正在使用xampp的phpMyAdmin接口来运行这个sql语句

3 个答案:

答案 0 :(得分:0)

Update语句假设在表格中:

UPDATE table
SET column1 = expression1,
    column2 = expression2,
    ...
WHERE conditions;

因此,您的from条款无关紧要。

您可以使用joins和子select - 查询来链接到其他表格。

- 关于如何实现这一点(实际上,完全重复)有很好的demos

UPDATE TABLEA a 
JOIN TABLEB b ON a.join_colA = b.join_colB  
SET a.columnToUpdate = [something]

答案 1 :(得分:0)

由于诺伯特的建议,我明白了。

我用过

update data m, data m0
set m.difference = datediff(date(m.date2),date(m0.date2))/365
where m.id = m0.id
and m.date2 <> '0000-00-00 00:00:00';

我使用的是mysql datediff的错误语法,它将2个日期作为参数,并以天为单位返回差异。

答案 2 :(得分:-1)

尝试使用此语法进行多表更新:

Update data m, data m0
SET m.difference = datediff("hh",m.date2, m0.date1)/8765 
WHERE m.id = m0.id
AND m.date2 <> '0000-00-00 00:00:00';

请注意,在SET语句中,您还需要指明要更新的表,否则它仍然会给您一个很好的警告。