我正面临一个由sqlalchemy生成的查询的oracle错误ORA-00928: missing SELECT keyword
。这个问题已经被描述和回答了here。你知道吗
我的查询如下所示:
WITH table2 (id) AS (
SELECT id
FROM table3
)
UPDATE table SET id=1
WHERE EXISTS (
SELECT *
FROM table
WHERE id IN (SELECT id FROM table2)
)
并由此产生:
table2 = session.query(table3.id).cte()
update(table).where(exists().where(table.id.in_(table2))).values(id=1)
现在我想知道如何告诉sqlachemy将cte放在WHERE
子句中,而不是放在UPDATE
之上。你知道吗
UPDATE table SET id=1
WHERE EXISTS (
WITH table2 (id) AS (
SELECT id
FROM table3
)
SELECT *
FROM table
WHERE id IN (SELECT id FROM table2)
)
CTE是一种从查询中提取内联视图的好方法,这样做可以使代码更易于阅读和维护。你知道吗
当CTE还没有发明的时候,我们使用内联视图。这里有几个例子(基于Scott的模式)来说明我的意思。你知道吗
首先,CTE:
可以将其移动到内联视图中:
或者,使用old语法,表(在
FROM
子句中)用逗号分隔,联接在WHERE
子句中完成(这看起来很熟悉):这意味着您的查询可能如下所示;请注意显示CTE位置的注释:
相关问题 更多 >
编程相关推荐