SQLite存在WITH UPDATE语句

3duebb1j  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(225)

我使用的是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)。

有人能帮我这个忙吗?

mcdcgff0

mcdcgff01#

第一个查询不起作用,因为您在WHERE子句中引用了Element,而没有在任何地方定义它(作为表或别名)。
第二个是因为子查询不依赖于主查询(它不是相关子查询),因此它对每一行都有相同的值。
要做到这一点,更简单的方法可能是:

UPDATE Line SET length = 2
WHERE Element_ID in ( SELECT Element_ID FROM Element WHERE Name = 'c18' )

或者说得更明确一点:

UPDATE Line SET length = 2
WHERE Element_ID in ( SELECT e.Element_ID FROM Element e WHERE e.Name = 'c18' )

相关问题