提高SQL查询
问题描述:
请帮助改善以下查询:提高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:任务的目的:table_name的“query”字段对于“name”View1和View2都应该是相同的。
例如,在目前的企业视图1 = 1的“查询”,视图2 = 3的查询,对人这些值是2和4。
我想唯一的SQL查询来更新记录因此对于View1和View2的公司,“查询”值应为1,对于View1和View2的人员,“查询”值应为2.
答
从它的声音中,您无法引用更新从子查询中删除别名,尤其是在删除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');
+0
它的工作原理,谢谢你,我从上一个“where”子句中删除别名的唯一更改:Where queries.NAME ='View2' 和queries.table_name IN('companies','persons'); – Alexandr 2011-04-04 05:44:09
改进方法?它不会按照您期望的方式改变数据吗?它表现不好吗? – Thomas 2011-04-01 04:44:32
对于什么数据库? – 2011-04-01 04:45:49
您编写查询的方式似乎完全合理。如果性能问题,您可能需要添加适当的索引。在这种情况下,首先确保table_name上有一个索引,因为这是您加入的字段。 – 2011-04-01 04:53:15