我有几张 table
CREATE TABLE [dbo].[prods](
[IdProducto] [int] IDENTITY(1,1) NOT NULL,
[IdGrupo] [int] NULL,
[IdCategoria] [int] NULL,
[IdAlmacen] [varchar](50) NULL,
[Codigo] [varchar](50) NULL,
[Nombre] [varchar](50) NULL,
[Descripcion] [varchar](max) NULL,
[Cantidad] [int] NULL,
[Imagen] [varchar](max) NULL,
[StockMin] [int] NULL,
[StockMax] [int] NULL,
[Ancho] [varchar](50) NULL,
[Alto] [varchar](50) NULL,
[Largo] [varchar](50) NULL,
[Peso] [varchar](50) NULL,
[Volumen] [varchar](50) NULL,
[Color] [varchar](50) NULL,
[Material] [varchar](50) NULL,
[Presentacion] [varchar](50) NULL,
[bitPrecioVentaUnico] [int] NULL,
[PrecioCompra] [money] NULL,
[DescuentoCompra] [float] NULL,
[PrecioVenta] [money] NULL,
[DescuentoVenta] [float] NULL,
[Estado] [varchar](20) NULL
)
和
CREATE TABLE [dbo].[prodnuevos](
[Codigo] [int] NULL,
[itemid] [int] NULL,
[Item] [varchar](255) NULL,
[Categoria] [varchar](255) NULL,
[Cantidad] [int] NULL,
[Minima] [nvarchar](255) NULL,
[Costo] [money] NULL,
[Valor] [money] NULL,
[peso] [float] NULL,
[unidades] [float] NULL
)
两个表都有些相似,都有一个产品列表,prodnuevos(我们可以考虑西类牙语的新产品),比 prods 有一个更扩展的列表(我们称之为产品)
我想要做的是使用一个查询来插入新产品中可用但产品中不可用的所有行...
我尝试过这个长查询
INSERT INTO prods (IdGrupo, IdAlmacen, Codigo, Nombre, Descripcion, Cantidad, Imagen, StockMin,StockMax, Ancho, Alto, Largo, Peso, Volumen, Color, Material, Presentacion, bitPrecioVentaUnico, PrecioCompra, DescuentoCompra, PrecioVenta, DescuentoVenta, Estado)
VALUES (1, 'Ninguno', (Select prodnuevos.Codigo FROM prodnuevos LEFT JOIN prods ON prodnuevos.Item = prods.Nombre WHERE prods.Nombre IS NULL), (Select prodnuevos.Item FROM prodnuevos LEFT JOIN prods ON prodnuevos.Item = prods.Nombre WHERE prods.Nombre IS NULL), '', (Select prodnuevos.Cantidad FROM prodnuevos LEFT JOIN prods ON prodnuevos.Item = prods.Nombre WHERE prods.Nombre IS NULL), '', 0, 0, '', '', '', '', '', '', '', 'Ninguno', 0, (Select prodnuevos.Costo FROM prodnuevos LEFT JOIN prods ON prodnuevos.Item = prods.Nombre WHERE prods.Nombre IS NULL), 0, 0, 0, 'Activo');
当我尝试此操作时,出现以下错误
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我想知道如何正确使用这个查询。
顺便问一下,是否还有一种方法可以使用更少的子查询而不是重复多次?
谢谢
最佳答案
你的想法是正确的,只是解决问题的方式错误。您应该首先SELECT
一个结果集,该结果集将为您提供要复制的数据,然后在其前面加上INSERT
前缀,如下所示:
INSERT INTO table VALUES (col1, col2)
SELECT col1, col2 FROM table2
您也不需要在 INSERT ... VALUES
列表中包含具有默认值且子表中不存在的列。
关于sql - 如何使用不同的子查询在表中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206029/