【发布时间】:2017-07-31 10:05:17
【问题描述】:
共有三个表:core、system、fact:
核心表包含以下列 core_date、close_date、x、y、z、ata 和 soln_imp 列
系统表包含以下列 system_date,x,y 和 z 列
事实表包含 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