根据另一张表的字段更新列

6
我想根据其他表中对应的值更新一个表中的值。比如说你想要更新由特定制造商提供的零件的价格,其名称在表Manufacturers中,而Pieces表只包含制造商的id。
我已经看到了一些MySQL这里和MS SQL Server这里的解决方案,但似乎没有一个适用于SQLite。
有什么建议吗?

3
+1:对于机智的表现。如果其他人也能花同样的努力研究他们的问题就好了... - OMG Ponies
2个回答

2
你尝试过类似这样的东西吗?
UPDATE Pieces
SET price = 42
WHERE manufacturer_id = (
    SELECT id
    FROM Manufacturers
    WHERE Name = 'FooBar Inc.'
)

是的,它有效!谢谢。嵌套SELECT中不应该是first(id)吗? - Sergio
@OMG Ponies:是SQLite,不是MySQL。为什么不能有两个名为“FooBar Inc.”的公司呢?唯一性限制只适用于主键(id)。 - Sergio
2
@Sergio:非常抱歉,但是关于潜在的重复数据问题还是存在的。PK将是ID,假设SQLite支持,名称应该具有唯一约束。 - OMG Ponies
1
@Sergio:OMG Ponies说得很有道理。如果有两个同名的制造商,你怎么知道该更新哪一个?你可能不想同时更新两个。而仅仅选择第一个似乎对我来说是危险的,因为你有50%的概率选择错误的那个。我给你提供的查询将在存在两个同名公司的情况下失败,但我认为在这种情况下这是合理的做法。 - Mark Byers
@天哪小马,@马克:很好! - Sergio

0

在SQLite中,UPDATE语句中没有JOIN功能。您唯一的选择是使用相关子查询:

UPDATE pieces 
    SET price = (SELECT SUM(price)
                 FROM manufacturers
                 WHERE pieces.manufacture_id = manufacturers.id)
WHERE manufacture_id in (SELECT id
                         FROM manufacturers
                         WHERE name IN ('boo', 'foo'));

这不是很有效率,但你可以根据自己的需求进行调整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接