在SQL中分解值插入

时间:2015-04-26 12:44:24

标签: sql

目前正在做一些SQL查询,我一直在做这个,以便有多个产品到Product表。事情是我意识到' Z'参数在插入的每个值中。有没有办法对代码进行分解,以避免重复3次' Z'?

insert into Product(maker, model, type) values 
('Z', 4003, 'Printer'),
('Z', 4001, 'PC'),
('Z', 4002, 'Laptop')

3 个答案:

答案 0 :(得分:1)

INSERT .. SELECT使用CROSS JOIN

某些数据库(如PostgreSQL,SQL Server):

INSERT INTO product (maker, model, type)
SELECT *
FROM (
  SELECT 'Z'
) z
CROSS JOIN (
  VALUES (4003, 'Printer'),
         (4001, 'PC'),
         (4002, 'Laptop')
) v

其他数据库(如Oracle):

INSERT INTO product (maker, model, type)
SELECT *
FROM (
  SELECT 'Z' FROM DUAL
) z
CROSS JOIN (
  SELECT 4003, 'Printer' FROM DUAL UNION ALL
  SELECT 4001, 'PC'      FROM DUAL UNION ALL
  SELECT 4002, 'Laptop'  FROM DUAL
) v

答案 1 :(得分:0)

我同意Pala_, 你可以试试......

insert into Product( model, type) values 
( 4003, 'Printer'),
( 4001, 'PC'),
( 4002, 'Laptop');

update Product
set maker = 'Z'
where maker is null;

干杯 安德鲁

答案 2 :(得分:0)

您可以在DEFAULT字段上设置maker约束,以便在插入新行时为其设置默认值

试试这个:

CREATE TABLE Product(
    maker CHAR(1) DEFAULT 'Z'
    ,model INT
    ,[type] VARCHAR(10)
) 

对于现有表,请尝试:

ALTER TABLE Product
ADD CONSTRAINT df_Product_maker
DEFAULT 'Z' FOR maker

现在,只要您想添加新行,就不需要指定maker

INSERT INTO Product(model, [type]) VALUES   (4003, 'Printer')
                                            ,(4001, 'PC')
                                            ,(4002, 'Laptop')

如果您不想使用maker

,则可以为DEFAULT添加值
INSERT INTO Product(maker, model, [type]) VALUES ('A', 4003, 'Printer')

我的语法在SQL Server中,因为您没有提到您正在使用的数据库。