我想在一个表中添加一个新列,其中包含来自其他表列的默认值。
abs(avgr1-avgr2)<1
我想在sensordata表中添加一个列,其默认值为sensorId相同的位置。
我该怎么做?
像这样的东西
SELECT ?p ?p1 ?genre (abs (AVG(?rating)-AVG(?ratingp1)) AS ?RDiff)
WHERE{
?p movies:hasRated ?rate.
?p1 foaf:knows ?p.
?rate movies:ratedMovie ?mov.
?rate movies:hasRating ?rating.
?mov movies:hasGenre ?genre.
?p1 movies:hasRated ?ratep1.
?ratep1 movies:ratedMovie ?movp1.
?ratep1 movies:hasRating ?ratingp1.
?movp1 movies:hasGenre ?genre.
FILTER (xsd:float(?Rdiff)<1.0 && ?p=movies:user1)
}
GROUP BY ?p ?p1 ?genre
请不要告诉我为什么我需要重复数据,这是有原因的:)
答案 0 :(得分:2)
您需要分2步完成
<强>步骤1 强>
update sensordata sd
join sensors s on s.sensorId = sd.sensorId
set sd.location = s.location
<强>步骤2 强>
ALTER TABLE `sensordata` ADD `location` VARCHAR(200) NULL DEFAULT NULL AFTER `dataValues`;
UPDATE sensordata d SET d.location = (SELECT s.location from sensors s WHERE s.sensorID = d.sensorID);
<强>更新强> 这就是我所做的,它工作正常
{{1}}
答案 1 :(得分:1)
Mysql几乎在所有情况下都要求默认值为常量 - https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html。
您可以编写before insert
触发器,以在某种程度上模拟DEFAULT
功能。当然,触发器只会影响新行,您需要手动更新现有行。