【问题标题】:Oracle : Which column to update ? Complex queryOracle:要更新哪一列?复杂查询
【发布时间】:2013-05-20 09:12:26
【问题描述】:

我有 15 列、12 列(一月、二月、三月、...、十二月)的表,要填满我的表,我应该知道要更新的列。

因为更新查询依赖于用户输入,如果他输入 1 我应该更新一月等...

我想知道是否可以这样做?

我有 3 个查询:

  1. 我从许多表中收集数据来计算一年、一个月一感的价值(进口/出口和产品)
  2. 我将结果放在另一个中间表中,其中只有 sens、year、month 和 value
  3. 第三个查询是用中间表更新另一个表

第三张表有 (January, February, March,..) 列

谢谢

【问题讨论】:

  • if he enter 1 i should update January and so... 用户如何输入 1 来更新值?
  • 您是否在程序中取值,然后根据这些值更新表?
  • 只有一位用户会输入号码
  • 先生,我问的是怎么做的? while 执行 update 语句他是否会放 1?如果是,那么他可以直接写列名来代替额外的值 1 或 2。
  • 我要问的是用户必须提供一些值,如主键值(对于他想要更新的表)和要更新的值(如果用户输入 1 那么我们需要更新这个值放到一月列)那么这些值和入口值(1,2等)他是怎么提供的?

标签: sql oracle10g sql-update


【解决方案1】:

你有一个糟糕的数据库设计。最好的办法是将这些列规范化为一列,并用一列表示月份。

但是,您可以使用 case 语句控制更新的列。

update
  my_table
set
  january_col  = case when column_to_update = 1 then new_value else january_col  end,
  february_col = case when column_to_update = 2 then new_value else february_col end,
  march_col    = case when column_to_update = 3 then new_value else march_col    end,
  ... etc
where
  ...

【讨论】:

  • 是的,也许你是对的,但是查询太复杂了(从查询开始做一些更新)
【解决方案2】:

after this clarification

假设我们有一个程序,我们在变量 p_user_in 中获取用户条目,在参数 p_val 中获取所需值。

我猜你也在为过程提供主键值(我将一列 col1 作为表的主键)并且我们在 p_prim_val 中获得了这个值。

那么您可以使用以下更新语句来相应地更新您的表 -

update table_name 
set  January = case when p_user_in = 1 then p_val else January end,
 February = case when p_user_in = 2 then p_val else February end,
 March = case when p_user_in = 3 then p_val else March end,
 April = case when p_user_in = 4 then p_val else April end,
 May = case when p_user_in = 5 then p_val else May end,
 June = case when p_user_in = 6 then p_val else June end,
 July = case when p_user_in = 7 then p_val else July end,
 August = case when p_user_in = 8 then p_val else August end,
 September = case when p_user_in = 9 then p_val else September end,
 October = case when p_user_in = 10 then p_val else October end,
 November = case when p_user_in = 11 then p_val else November end,
 December = case when p_user_in = 12 then p_val else December end
where col1 = p_prim_val

【讨论】:

  • 非常感谢,就像大卫之前说的一样。
  • 是的 @devosJava 我在发布后看到的。这是正确的方法,您可以基于此构建逻辑。
  • 对不起@patrik garg 但是当我执行我的代码时它可以工作但仅适用于最后一次更新。因为我在循环中工作
  • @devosJava 你的循环条件是什么,你是如何循环的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多