改进sql查询

时间:2011-04-01 04:41:43

标签: sql

请帮助改进以下查询:

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。

1 个答案:

答案 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');