MySQL - 通过查询另一个表中的产品ID插入表中

时间:2013-09-04 13:47:24

标签: mysql sql

我有两张桌子。

这是结构

CREATE TABLE IF NOT EXISTS `CATALOG_CATEGORY_PRODUCT` 
  ( 
     `CATEGORY_ID` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Category ID', 
     `PRODUCT_ID`  INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Product ID', 
     `POSITION`    INT(11) NOT NULL DEFAULT '0' COMMENT 'Position', 
     PRIMARY KEY (`CATEGORY_ID`, `PRODUCT_ID`), 
     KEY `IDX_CATALOG_CATEGORY_PRODUCT_PRODUCT_ID` (`PRODUCT_ID`) 
  ) 
ENGINE=INNODB 
DEFAULT CHARSET=UTF8 
COMMENT='Catalog Product To Category Linkage Table'; 

CREATE TABLE IF NOT EXISTS `CATALOG_PRODUCT_ENTITY_TIER_PRICE` 
  ( 
     `VALUE_ID`          INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Value ID', 
     `ENTITY_ID`         INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 
     'Entity ID', 
     `ALL_GROUPS`        SMALLINT(5) UNSIGNED NOT NULL DEFAULT '1' COMMENT 
     'Is Applicable To All Customer Groups', 
     `CUSTOMER_GROUP_ID` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' COMMENT 
     'Customer Group ID', 
     `QTY`               DECIMAL(12, 4) NOT NULL DEFAULT '1.0000' COMMENT 'QTY', 
     `VALUE`             DECIMAL(12, 4) NOT NULL DEFAULT '0.0000' COMMENT 
     'Value', 
     `WEBSITE_ID`        SMALLINT(5) UNSIGNED NOT NULL COMMENT 'Website ID', 
     PRIMARY KEY (`VALUE_ID`) 
  ) 
ENGINE=INNODB 
DEFAULT CHARSET=UTF8 
COMMENT='Catalog Product Tier Price Attribute Backend Table'; 

所以我有大约500种产品。

我在catalog_category_product category_id = 37

SELECT PRODUCT_ID FROM `CATALOG_CATEGORY_PRODUCT` WHERE CATEGORY_ID = 37 查询了产品ID

这是查询。

INSERT INTO `CATALOG_PRODUCT_ENTITY_TIER_PRICE` 
            (`ENTITY_ID`, 
             `ALL_GROUPS`, 
             `CUSTOMER_GROUP_ID`, 
             `QTY`, 
             `VALUE`, 
             `WEBSITE_ID`) 
VALUES      (209, 
             1, 
             0, 
             60.0000, 
             10.0000, 
             0); 

使用该结果我想将价格插入等级价格表。

catalog_product_entity_tier_price.entity_id = catalog_category_product.product_id

此处catalog_category_product

所以209是{{1}}查询的第一个结果。我想对所有结果做同样的事情。

有人可以帮我解决mysql问题吗?

2 个答案:

答案 0 :(得分:9)

请尝试INSERT INTO ... SELECT ...,如下所示:

INSERT INTO `catalog_product_entity_tier_price` (`entity_id`, 
                                                 `all_groups`, 
                                                 `customer_group_id`,
                                                  `qty`, 
                                                  `value`, 
                                                  `website_id`)
SELECT product_id, 1, 0, 60.0000, 10.0000, 0
FROM `catalog_category_product`
WHERE category_id =37

答案 1 :(得分:4)

你可以这样做INSERT INTO ... SELECT语句:

INSERT INTO `catalog_product_entity_tier_price` (`entity_id`, `all_groups`, `customer_group_id`, `qty`, `value`, `website_id`) 
SELECT product_id, 1, 0, 60.0000, 10.0000, 0 
  FROM `catalog_category_product`
  WHERE category_id =37

这会在SELECT查询的每个结果中插入一行。所有其他列在所有插入的行中都是相同的。

如果您想在其他列中使用其他值,则必须以某种方式指定它们。