请帮助改进以下查询:
UPDATE queries q
SET query = (SELECT q1.query
FROM queries q1
WHERE q1.table_name = q.table_name
AND q1.name = 'View1')
WHERE q.NAME = 'View2'
AND q.table_name IN ('companies', 'persons');
我的查询表的结构:
table_name query name
-------------------------
companies 1 View1
persons 2 View1
companies 3 View2
persons 4 View2
ps:我希望它可以通过标准的sql语法完成,没有特定的数据库服务器功能。
pps:任务的目的:对于“name”View1和View2,table_name的“query”字段应该相同。
例如,对于公司来说,View1的“查询”= 1,查询View2 = 3,对于人,这些值为2和4.
我想通过唯一的sql查询更新记录,因此对于View1和View2的公司,“query”值应为1,对于View1和View2的人,“query”值应为2。
答案 0 :(得分:1)
从它的声音中,您在子查询中引用更新的表时遇到问题,尤其是在删除Update子句中的别名时。为此,只需使用更新表的全名即可。请注意,我使用了queries.table_name
并从Update子句中删除了别名(所以Update queries
代替Update queries q
)。
Update queries
Set query = (
Select q1.query
From queries q1
Where q1.table_name = queries.table_name
And q1.name = 'View1'
)
Where q.NAME = 'View2'
And q.table_name IN ('companies', 'persons');