我使用的是SQLite,有两个表:
行{ELEMENT_ID,LENGTH}
元素{Element_ID,名称}
我想通过在Element中指定“name”来将参数“Length”更新到Line中的某个值,其中Element_ID对于Line和Element是相同的。
SQLite不支持JOIN语句和UPDATE语句的组合,所以我尝试了UPDATE和EXISTS的各种组合,但都没有成功。示例;将元素名称为‘c18’的行的长度更新为2:
UPDATE Line
SET length = 2
WHERE EXISTS (SELECT length FROM Line WHERE Line.Element_ID = Element.Element_ID AND Element.Name = 'c18')
**结果:**错误:没有这样的列:Element.Element_ID
UPDATE Line
SET length = 2
WHERE EXISTS (SELECT length FROM Line INNER JOIN Element ON Line.Element_ID = Element.Element_ID WHERE Element.Name = 'c18')
**结果:**代码更新所有行的长度(它似乎忽略了EXISTS-语句WHERE Element.Name = 'c18'
中的最后一部分。我不明白为什么会发生这种情况,因为如果我只在WHERE EXISTS(..)程序选择正确的行(C18)。
有人能帮我这个忙吗?
1条答案
按热度按时间mcdcgff01#
第一个查询不起作用,因为您在
WHERE
子句中引用了Element
,而没有在任何地方定义它(作为表或别名)。第二个是因为子查询不依赖于主查询(它不是相关子查询),因此它对每一行都有相同的值。
要做到这一点,更简单的方法可能是:
或者说得更明确一点: