2012-07-11 75 views
1

我有以下查询,我使用..关于连接和子查询

select * from app_subsys_param where assp_name like '%param_name%' 

其中PARAM_NAME是参数的名称。从这个查询中,我们将得到对应于该参数的assp_id。通过这个id,我们查找app_subsys_parmval表来获取参数的值。

update app_subsys_parmval set aspv_value = 'true' where assp_id = id_val 

现在不是另外启动两个SQL语句,我想combime他们都为一个没有任何子查询或加入机制,可以在一条语句结合两者,请指教

+1

请让我们知道您正在使用,所以我们可以提供什么RDBMS正确的语法。 – 2012-07-11 18:09:14

+0

对于db2,请使用Flimzy的答案。这将是合适的语法。我将删除我的 – 2012-07-11 18:14:49

+0

您正在使用带有“true”的字符串吗?如果你使用的是不支持逻辑类型的版本(比如LUW),我想我宁愿使用1/0组合(或字符'1'/'0')。或者,可能更好的是,制作一个用户定义的类型。 – 2012-07-11 22:41:39

回答

1

在您的更新语句中使用子查询:

UPDATE app_subsys_parmval 
SET aspv_value = 'true' 
WHERE id_val = (SELECT assp_id 
       FROM app_subsys_param 
       WHERE assp_name LIKE '%param_name%') 

注意,我假设了一下什么是你select **

+0

@ lc ..你可以请更新帖子soo,我可以看看,这将使理解更清楚,谢谢 – user1508454 2012-07-11 18:04:58

+1

为什么downvotes?这篇文章是建设性的并回答了这个问题。现在,如果你不切断人们盘子里的肉,他们就会downvote ... – Sebas 2012-07-11 18:05:36

+0

好吧,我错过了什么? – 2012-07-11 18:05:40

2

您需要使用UPDATE .. FROM语法:

UPDATE app_subsys_paramval 
SET aspv_value = 'true' 
FROM app_subsys_param 
WHERE app_subsys_param.id = app_subsys_paramval.id 
    AND app_subsys_param.value LIKE '%param_name%'; 
+0

它是db2,所以这是要走的路。 +1 – 2012-07-11 18:14:28

+0

@迈克尔Thnanks很多兄弟..! – user1508454 2012-07-11 18:18:48

+0

Linux/UNIX/Windows上的DB2不支持'UPDATE ... FROM'语法。 – 2012-07-12 01:17:30

1

看那MERGE声明。这是针对UPDATE … FROM的ANSI SQL:2003标准。

文档:

  • MERGE用于DB2用于Linux/UNIX/Windows的
  • MERGE为DB2 z/OS的9.1