在SQL插入语句中对齐列名和值

时间:2018-05-21 16:22:31

标签: python sql regex bash

我有下面的插入语句

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,正则表达式技巧。

1 个答案:

答案 0 :(得分:0)

我更喜欢使用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设计是常见的反模式(它根本无法扩展)
  • 键/值可以是保留字,您应该避免使用此类标识符
  • value列必须是widetype(可能是NVARCHAR),然后你松散数据类型信息,例如DATE / TIMESTAMP / FLOAT / DECIMAL需要转换