1

我有一个小问题,我想 INSERT INTO myTable (id_product, id_tag) 组合值

我知道方法是:

INSERT INTO myTable values (value1a, value1b),(value2a, value2b)

但问题是我有 934 个产品和 5 个标签 = 4670 个组合。所以手动插入它需要很长时间!我知道 id 有什么产品:

SELECT id_product FROM prodTable

那么任何人都可以指导我应该做什么(程序,功能 - 我以前使用过它,直到今天?)

4

3 回答 3

0

您可以使用 CURSORS 或 LOOP。并将它们结合起来。

各有一个例子:

-环形

DECLARE y INT DEFAULT 2010;

cur_year_loop : LOOP
    IF y=2013 THEN
        LEAVE cur_year_loop;
    END IF;

    ...do things...

    SET y=y+1;
END LOOP cur_year_loop;

-光标

DECLARE cur_percentages CURSOR FOR SELECT value FROM test_percentages;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_perc = TRUE;
OPEN cur_percentages;
cur_percentages_loop : LOOP
    IF done_perc THEN
        CLOSE cur_percentages;
        LEAVE cur_percentages_loop;
    END IF;

    ...do things...
END LOOP cur_percentages_loop;
于 2013-02-01T10:07:55.530 回答
0

我认为你需要一个笛卡尔连接:

insert into myTable
select id_product, id_tag
from products, tags

SELECT 将选择所有产品 id,结合所有标签 id,并将行插入到 myTable 中。

于 2013-02-01T10:22:37.793 回答
0

如果所有标签都应该出现在所有产品上,那就相当简单了(其中 1 到 5 是五个 tag_id)

INSERT INTO myTable (id_product, id_tag) SELECT id_product, 1 FROM prodTable;
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 2 FROM prodTable;
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 3 FROM prodTable;
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 4 FROM prodTable;
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 5 FROM prodTable;

你可以在一个插入和一个联合中做到这一点,但这种方式可能是最清楚的。

一个简单的 SQLfiddle

当然,如果您在表格中有标签,@fthiella 的答案就更简单了。

于 2013-02-01T10:24:18.350 回答