sql - 将多行插入表中,只更改一个值

标签 sql oracle

假设我有一个包含以下列的表格:

字段 1 |领域 2 |字段3 |字段 4

我想在这个表中插入多行,但每一行的 field1、field2 和 field3 的值是相同的。只有 field4 的值会改变。

显然我可以单独插入每一行,但结果查询会有点难看,我想知道是否有更有效/更优雅的方法来做到这一点。

例如,我想到了这样的事情:

insert into my_table (field1, field2, field3, field4) values (foo, bar, baz, ('value one','value two','value three','value four'))

结果将是:
field1 | field2 | field3 | field4
foo    | bar    | baz    | value one
foo    | bar    | baz    | value two
foo    | bar    | baz    | value four
foo    | bar    | baz    | value five

实际上,'field4' 列是字符串类型,在我编写查询时知道不同的值。没有必要从 table 或任何东西中获取它们(尽管如果可能,我对可以做到的解决方案感兴趣)
这是可行的还是我必须分别编写每个插入?

编辑:我已将问题更改为更清楚更改列的数据类型(一般文本数据)以及数据来自何处。对不起,那些没有这些信息就已经回答的人。

谢谢。

最佳答案

您可以使用 case 对 Nicholas Krasnov 的回答进行变体设置字符串值的语句:

insert into my_table(field1, field2, field3, field4)
select 'foo', 'bar', 'baz',
  case level
    when 1 then 'value one'
    when 2 then 'value two'
    when 3 then 'value three'
    when 4 then 'value four'
  end
from dual
connect by level <= 4;

select * from my_table;

FIELD1 FIELD2 FIELD3 FIELD4             
------ ------ ------ --------------------
foo    bar    baz    value one            
foo    bar    baz    value two            
foo    bar    baz    value three          
foo    bar    baz    value four           

SQL Fiddle .

添加更多行/值只需要更改 level限制和额外 when要匹配的子句。 ( like this )。你也可以有一个 else如果您发现数字不匹配,则会发出警告。哪个字符串值与哪个 level 搭配没有特殊意义值,顺便说一句。

关于sql - 将多行插入表中,只更改一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19227699/

相关文章:

java - mysql 运行时异常

mysql - 分页后如何对行求和?

mysql - 选择要更新的查询

database - 提供正确的用户名和密码,得到 ORA-01017 : invalid username/password; logon denied

mysql - java.sql.Clob 读取 : weird results b/w MySQL and Oracle

java - 使用registerOutParameter函数时将oracle的 "OracleTypes.CURSOR"替换为mysql中的等效值

SQL (postgresql) 使用连接表中数据的间隔更新日期列

SQL-Oracle 错误 "date format picture ends before converting entire input string"

sql - -bash : imp: command not found oracle

sql - 如何按 ISO 周排序并从今天的周数开始