使用join插入表以解析单个元素

时间:2015-06-18 18:21:31

标签: java sql-server jdbc

我正在尝试插入表中,同时避免使用辅助查询来查找包含在另一个表中的产品的ID。

我的插入查询:

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

ProductID是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 = ?), ?, ?);

但我不相信这是解决这个问题的正确方法。

2 个答案:

答案 0 :(得分:2)

您可以进行子选择,例如

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

此示例来自http://www.techonthenet.com/sql_server/insert.php

答案 1 :(得分:2)

根据你的评论,这应该有效:

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

假设这三个参数是您从应用程序传递的值。

不需要连接,因为只有一个表包含插入所需的数据。其他值来自参数而不是表格。