【问题标题】:SQL update a column from other tables based on conditionsSQL 根据条件更新其他表中的列
【发布时间】:2017-07-31 10:05:17
【问题描述】:

共有三个表:core、system、fact:

  1. 核心表包含以下列 core_date、close_date、x、y、z、ata 和 soln_imp 列

  2. 系统表包含以下列 system_date,x,y 和 z 列

  3. 事实表包含 fact_date 列

我想根据以下条件更新core表的core_date(feed this column)列,

当核心表的ata列以10开头时,选择事实表的fact_date列

否则 根据以下匹配列从系统表中选择系统日期,例如 核心的 x,y,z 列应等于系统的 x,y,z 列

无论如何,如果核心表的soln_imp列为空,则选择核心表的close_date

能否请您对上述要求进行查询?

我在下面创建了查询:

update DB set 
     core_date = 


  case 
       when ata like '10%'

       THEN  (select distinct fact_date  from FACT)

  else     
   case when soln_imp is null
                   then close_date 

              else

                   (select distinct  system_date
                    from Core c left join Systems s on 
                            c.x = s.x
                            and  c.y = s.y and c.z = s.z
                            where c.soln_imp is not null) 

              end 
   end

运行查询后,我收到此错误:

子查询返回超过 1 个值。当子查询跟在=, !=, <, <= , >, >= 之后或当子查询用作表达式时,这是不允许的。

如果我的脚本错了,你能建议我正确的脚本吗?

【问题讨论】:

  • 也许 MIN 或 MAX 聚合而不是 distinct 可能会有所帮助,以及适当的 GROUP BY。可以肯定的是,选择只返回一个值。所以先测试你的选择,然后再把它们放在一起。除此之外,如果没有表格的示例数据,很难提供帮助。
  • mysql 和 sql-server 不同。请只选择一个。

标签: mysql sql-server


【解决方案1】:

我运行了您的查询,我可以进行更新。似乎可以是数据,我重现了您的查询,您的表格,但不是您的数据。错误是说这个选择:

select distinct  system_date
                from Core c left join Systems s on 
                        c.x = s.x
                        and  c.y = s.y and c.z = s.z
                        where c.soln_imp is not null

给出的不止一行。我要告诉您的第一件事是将别名放入 system_date,因此 s.system_date。然后我会运行这个查询,直到它得到你需要的一行。

我可以为您提供更多帮助,但您必须给我一些您的数据样本。

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多