我正在尝试插入表中,同时避免使用辅助查询来查找包含在另一个表中的产品的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 = ?), ?, ?);
但我不相信这是解决这个问题的正确方法。
答案 0 :(得分:2)
您可以进行子选择,例如
INSERT INTO table
(column1, column2, ... )
SELECT expression1, expression2, ...
FROM source_table
WHERE conditions;
答案 1 :(得分:2)
根据你的评论,这应该有效:
INSERT INTO prod_addfeatures (ProductID, ProdFeature, ProdFeatureTitle)
SELECT CatalogId, @ProdFeature, @ProdFeatureTitle
FROM Products
WHERE Id = @ProductId
假设这三个参数是您从应用程序传递的值。
不需要连接,因为只有一个表包含插入所需的数据。其他值来自参数而不是表格。