我有2个表,喜欢用另一个表中的值更新其中一个。
software
---------
id ,
purchprice
softwarecost
------------
id ,
purchprice
我已经尝试过这些查询但是,SQLite不支持使用UPDATE.anybody的JOINS,可以为此提出查询。感谢您的帮助。
UPDATE software
SET software.purchprice=softwarecost.purchprice
WHERE software.id=softwarecost.id
UPDATE software
INNER JOIN softwarecost on software.id=softwarecost.id
SET software.purchprice=softwarecost.purchprice
答案 0 :(得分:44)
这将有效
UPDATE
software
SET purchprice = (SELECT purchprice
FROM softwarecost
WHERE id = software.id)
where EXISTS (SELECT purchprice
FROM softwarecost
WHERE id = software.id)
这里我们使用存在因为 如果没有找到“相关”行,则查询会将software.purchprice设置为null。
答案 1 :(得分:32)
您必须使用相关子查询查找相应的值:
UPDATE software
SET purchprice = (SELECT purchprice
FROM softwarecost
WHERE id = software.id)
答案 2 :(得分:6)
此声明可以正常使用!
它只会更新'软件'中的行。在' softwarecost'中具有相同的ID!
UPDATE software SET software.purchprice =
(SELECT purchprice FROM softwerecost WHERE software.id = softwerecost.id)
WHERE id IN (SELECT id FROM softwarecost);
另一种方法:
DELETE FROM software WHERE id IN (SELECT id FROM softwarecost);
INSERT INTO software SELECT * FROM softwarecost;
...如果您必须更新所有列(如果您有更多列要更新),这种方式会更方便
答案 3 :(得分:3)
我刚刚使用UPSERT找到了这个
:INSERT INTO software (id, purchprice)
SELECT a.id, b.purchprice FROM software AS a INNER JOIN softwarecost AS b ON a.id=b.id
ON CONFLICT(id) DO UPDATE SET purchprice=excluded.purchprice
这只有在您拥有的情况下才有效
它不需要潜在的慢速关联子查询,并且可以处理多个列更新。
答案 4 :(得分:2)
Carter,问题>> 靠近“s”:语法错误<<是关于使用ALIAS。 UPDATE命令不接受ALIAS。如果你尝试了关于REPLACE的bogdan技巧,你可以加入SELECT子句。
答案 5 :(得分:1)
我知道这很老,但是我更喜欢
UPDATE software
SET purchprice = IFNULL( (SELECT purchprice
FROM softwarecost
WHERE id = software.id), purchprice)
它可作为带有JOINs的UPDATE问题的常规解决方案,并节省了SQLite必须执行第二条SELECT语句以验证子查询中确实存在一行的情况。
答案 6 :(得分:1)
这里的其他答案大多是正确的,但需要稍作改动。至少我当然需要做出改变才能让它发挥作用。不确定这是多年来发生的对 SQLite 的更改,还是从未在此处捕获,但您需要完全限定对 id
中 softwarecost
列的引用} 子句为 WHERE
而不仅仅是 WHERE softwarecost.id = software.id
。如果不这样做,我刚刚运行的查询使所有条目都具有相同的值,并且它是链接的第一个值 - 意味着 WHERE id = software.id
的所有条目与 software.purchprice
中的第一个条目相同。我认为这是由于 id 列不明确,如果它只是“id=software.id”,因此链接到自身。
softwarecost.purchprice
答案 7 :(得分:-1)
这里没有加入:
UPDATE software SET software.purchprice=softwarecost.purchprice WHERE software.id=softwarecost.id
这不起作用:
UPDATE software s INNER JOIN softwarecost sc on s.id=sc.id SET s.purchprice=sc.purchprice
SQLite在UPDATE查询http://sqlite.org/lang_update.html
中确实不支持JOIN使用REPLACE怎么样?
也许你可以:
REPLACE INTO software SELECT id, purchprice FROM softwarecost
答案 8 :(得分:-1)
您可以尝试尝试
UPDATE software SET purchprice = (SELECT purchprice FROM softwarecost a WHERE a.id =software.id) where purchprice IN(SELECT distinct(purchprice) FROM softwarecost a WHERE a.id = software.id)