【问题标题】:Aligning column names and values in SQL insert statements在 SQL 插入语句中对齐列名和值
【发布时间】:2018-10-31 08:23:48
【问题描述】:

我有如下插入语句

INSERT INTO KeyValue (id, key, value) VALUES (101, 'color', 'green');
INSERT INTO KeyValue (id, key, value) VALUES (102, 'color', 'green');
INSERT INTO KeyValue (id, key, value) VALUES (103, 'color', 'green');

有没有办法对齐列名和值,以便于读取值(值在列名下方)?

喜欢

INSERT INTO KeyValue (id,   key,     value) 
            VALUES   (101, 'color', 'green');
INSERT INTO KeyValue (id,   key,     value) 
            VALUES   (102, 'color', 'green');
INSERT INTO KeyValue (id,   key,     value) 
            VALUES   (103, 'color', 'green');

有这方面的工具吗?可以使用任何 SQL、shell、python、正则表达式技巧。

【问题讨论】:

标签: python sql regex bash


【解决方案1】:

我更喜欢使用INSERT INTO SELECT

INSERT INTO KeyValue (id, key, value)
SELECT 101 AS id, 'color' AS key, 'green' AS value;
-- FROM dual -- if Oracle

或多行:

INSERT INTO KeyValue(
    id
   ,key
   ,value
)
SELECT 
    101     AS id
   ,'color' AS key
   ,'green' AS value;

备注:

  • EAV 设计是常见的反模式(它根本无法扩展)
  • key/value 可以是保留字,你应该避免这样的标识符
  • 值列必须是宽类型(可能是 NVARCHAR),然后您会丢失数据类型信息,例如 DATE/TIMESTAMP/FLOAT/DECIMAL 需要转换

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多