SELECT DISTINCT 'update loc_final_2 set county = ''' || TRIM(upper(county) ) || '''
where city = '''
|| TRIM(upper(city) ) || ''' and state = ''' || TRIM(upper(state) ) || ''';'
FROM audtr_rgn_assgnmnts;
commit
有人可以告诉我上面的查询做什么。有一个名为loc_final_2
的表,另一个名为audtr_rgn_assgnmnts
的表。我不了解查询的内容,因此需要改进此查询。但是在此之前,我必须了解它在做什么。我还需要知道提交到底在做什么。
答案 0 :(得分:0)
查询正在尝试使用audtr_rgn_assgnmnts中的值为表loc_final_2生成多个更新语句。
我不确定为什么commit
在那里存在,因为查询没有被执行。
如果查询的原始编码器的意图是运行多个更新,那么我会说这是错误的方法。像这样的单个更新/合并将更加简单和高效。
UPDATE loc_final_2 l
SET
county = (
SELECT upper(TRIM(county) ) --Add MIN/MAX if there are multiple rows
FROM audtr_rgn_assgnmnts a
WHERE l.city = upper(TRIM(a.city) ) AND l.state = upper(TRIM(a.state) )
);
MERGE INTO loc_final_2 t USING audtr_rgn_assgnmnts s ON (
l.city = upper(TRIM(a.city) ) AND l.state = upper(TRIM(a.state) )
)
WHEN MATCHED THEN UPDATE SET t.county = UPPER(TRIM(s.county));
如果有多行,则需要在USING
MERGE INTO loc_final_2 t USING (
SELECT DISTINCT city,
state,
upper(TRIM(s.county) ) AS county
FROM audtr_rgn_assgnmnts
)
s ON (
l.city = upper(TRIM(a.city) ) AND l.state = upper(TRIM(a.state) )
)
WHEN MATCHED THEN UPDATE SET t.county = s.county;
编辑:
查询中的3个单引号是什么
Oracle中的文字引号需要使用另一个单引号转义。
因此,如果您的最终查询需要使用a='b'
之类的东西,则生成该字符串的表达式应该是a=||'''b||'''
之一,本身就是一个引号,以转义该引号,另一部分为串联。
因为最小/最大只能用于数字,对吧?
MAX
和MIN
可以用于字符串。在这里我说过您可以使用它来避免内部查询返回的相同县的重复值。如果您不想使用DISTINCT
,也可以选择MIN/MAX
。