2013-01-07 30 views
2

我有幾個表如何使用不同的子查詢

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'); 

當我嘗試,我得到了以下錯誤

子查詢比返回多1值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。

我想知道如何正確使用此查詢。

順便說一下,是否還有一種方法,我可以使用較少的子查詢,而不是重複它不同的次數?

謝謝

回答

2

你有正確的想法,只是接近問題的錯誤的方式。你應該先SELECT的結果集,將讓你,你要複製過來的數據,然後用你的INSERT前綴它像這樣:

INSERT INTO table VALUES (col1, col2) 
SELECT col1, col2 FROM table2 

你也不需要在你的INSERT ... VALUES列表列那有一個默認值,並不存在於你的子表中。

+0

+1好主意,從未這樣想過 – exexzian

相關問題