2015-06-18 37 views
2

我試圖插入到表中,同時避免了輔助查詢來查找包含在另一個表中的產品的ID。使用連接插入到表中以解析單個元素

我插入查詢:

INSERT INTO prod_addfeatures (ProductID, ProdFeature, ProdFeatureTitle) VALUES (?, ?, ?); 

產品ID是Long Integer,其他兩個是簡單的字符串。

在程序中的這一點上,我只有ProductID(sku,例如:TB100)的字符串表示形式。

爲了得到SKU的數字ID,我會做這樣的事情:

SELECT products.catalogid FROM products WHERE id = ?; 

id不是PK,而是catalogid是......這是一個供應商表,不能更改)。

我試圖避免在運行INSERT之前進行SELECT操作,以避免額外的網絡往返(遠程數據庫),但是我真的只能挖掘選擇到表中的示例,並不完全我在追求什麼。

爲了清楚:

被插入必須在運行時提供的三個值中的兩個,並且在任何其他表中不存在。由於它位於另一個表中,因此必須在運行時查找其中的三個值。

ProductID  <-- Must be selected or joined from the products table 
ProdFeature  <-- Supplied at runtime 
ProdFeatureTitle <-- Supplied at runtime 

所以我「試圖讓這樣的:

INSERT INTO prod_addfeatures (ProductID, ProdFeature, ProdFeatureTitle) 
    VALUES ((SELECT products.catalogid FROM products WHERE products.id = ?), ?, ?); 

但我不相信這是去了解這個正確的方法

+0

這並不完全清楚您可以使用什麼值來從產品表中獲取ProductID。 –

+0

@TabAlleman我有'products.id',比如說「TB100」。所需的值是「products.catalogid」,即「123456」。 – SnakeDoc

回答

2

根據您的意見,這應該工作:

INSERT INTO prod_addfeatures (ProductID, ProdFeature, ProdFeatureTitle) 
SELECT CatalogId, @ProdFeature, @ProdFeatureTitle 
FROM Products 
WHERE Id = @ProductId 

假設三個參數是您從您的應用程序傳遞值。

不需要連接,因爲只有一個表包含插入所需的數據。其他值來自參數而不是表格。

2

你可以做一分。選擇,例如,

INSERT INTO table 
(column1, column2, ...) 
SELECT expression1, expression2, ... 
FROM source_table 
WHERE conditions; 

從該實施例從http://www.techonthenet.com/sql_server/insert.php

+0

我不知道這是如何工作的,因爲我必須在運行時提供三個值中的兩個(它們不存在於任何地方),第三個值必須來自另一個來自某種查找或連接的表。 – SnakeDoc

+0

在您的例子,這會看起來像 'INSERT INTO prod_addfeatures(產品ID,ProdFeature,ProdFeatureTitle)VALUES((SELECT products.catalogid FROM產品WHERE ID =?), '值2',VAL3' )' –

+0

正確的,那是什麼我正在嘗試。它的工作原理,但我一直聽說做子查詢是昂貴的,並儘可能加入。 – SnakeDoc