【问题标题】:Update statement with Join in Informix在 Informix 中使用 Join 更新语句
【发布时间】:2014-01-24 12:13:09
【问题描述】:

我需要从表中选择一个employee_id

select emp_id 
from employee emp, temp_data td where lower(td.supervisor_name) like lower(emp.last_name||emp.firstname)

并将其插入到同一张表的字段中

update emp set emp.supervisor_id = **The value returned from the previous query**
from employee as emp
Inner join temp_table as td
on td.emp_id = emp.emp_id

有什么方法可以实现吗?问题是我在更新语句中设置它时引用了同一个表的另一个字段。如果有任何其他路线我可以去,请告诉我...我在 Informix 中做。

【问题讨论】:

  • 将查询放在更新语句中 Equlas to Symbol 之后
  • 感谢您的回复...它需要永远并给我以下错误... 18:18:39 [更新 - 0 行,0.000 秒] [错误代码:- 79716,SQL 状态:IX000] 系统或内部错误 java.net.SocketTimeoutException:读取超时 ... 1 条语句执行,0 行受影响,执行/获取时间:0.000/0.000 秒 [0 成功, 0 个警告,1 个错误] 我知道其中有问题,因为这就像两次声明相同的表。如果您认为它会起作用,请您为我写下整个语句。谢谢
  • 如果有这个问题,请勾选:stackoverflow.com/questions/19004605/… 帮助您解决问题。
  • 您好 ceinmart,感谢您的回复。但是我已经在合并语句中使用了这个查询。我不确定在另一个合并语句中使用合并的效率如何。此外,它不仅仅是一个简单的分配 ON t1.ID = t2.ID... 它应该是 t1.id = select id from the table where last name matches... 有没有办法先获取值,将其存储在变量中然后更新?那会容易得多...

标签: informix update-statement


【解决方案1】:

我认为您需要检查您的数据 完成以下检查

table : temp_data 表有以下数据

supervisor_name
------------------------------
kaushal
abc
solanki
def

table : 员工表有以下值

firstname  last_name
------------------------------
ajay       jadeja 
sachin     solanki 
kaushal    kumar
manish     galav 

1.

 select  supervisor_name from temp_data 
 select  firstname from employee  

注意结果
1 条名为 kaushal 的记录匹配。所以你需要更新kaushal的ID

2.

   select  supervisor_name from temp_data 
   select  last_name from employee  

1 条名为 solanki 的记录匹配。所以需要更新solanki的ID

查看结果

注意你需要更新多少行(这里是 2)

首先尝试将您的选择查询放入更新查询中 然后你说它给出了错误..

然后试试这个:

如下修改您的选择查询并将其放入您的更新查询中。

select emp_id 
from employee emp, temp_data td 
where 
( lower(td.supervisor_name) like lower(emp.last_name ) 
or 
lower(td.supervisor_name) like (emp.firstname) )
)

查看结果2行更新与否...????????

【讨论】:

  • 哇..感谢您花时间回复。对此,我真的非常感激。我的问题是我指定的两个查询器单独工作正常。我只是很困惑如何在两个查询中为两个表中的每一个做两个声明......见粗体update emp set emp.supervisor_id = select emp_id from **employee emp, temp_data td** from ** employee as emp** Inner join **temp_table as td**
【解决方案2】:

试试这个也成功更新你的数据。

作为员工合并到员工中 使用 temp_data 作为 td ON emp.emp_id = td.emp_id 和 ( lower(td.supervisor_name) 像 lower(emp.last_name) 要么 lower(td.supervisor_name) 像 lower(emp.firstname) ) 当匹配然后更新设置 emp.supervisor_id = emp.emp_id

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    相关资源
    最近更新 更多