0

我有一个场景,我想在表中选择一组记录,然后基于第二次选择将新记录从第一次选择写入表中。

我希望从中选择然后写入的表是:

子弹
--------
ID
产品代码
catalogue_category_id
子弹文本
排序序列

注意 id 是键,是一个自动递增的整数

我选择的记录如下:

SELECT product_code, catalogue_category_id, bullet_text, sort_sequence 
  FROM bullets 
 WHERE product_code = '10001'

对于这个产品,这给出了 4 行,项目符号的数量可能因一种产品而异。结果是:

10001, , 测试要点 - 10001,  
10001, , 第二个要点,  
10001, , 第三个要点,  
10001, , 第 4 子弹,

在这种情况下,catalogue_category_id 和 sort_sequence 为空,但情况并非总是如此。

然后我想选择一些产品代码并编写,在这种情况下,每个项目符号点有 4 条记录。

获取产品代码列表的第二个选择语句是

SELECT product_code 
  FROM master 
 WHERE product_group = '1' 
   AND product_code != '10001'

这会返回 17 个产品代码,但可能会更少或更多,具体取决于所选的 product_group。

新记录将包括:

id - 这将自动递增
product_code - 这将是第二个 select 语句中的新产品代码
catalogue_category_id - 这将是从第一个 select 语句中选择的数据
bullet_text - 这将是从第一个 select 语句中选择的数据
sort_sequence - 这将是从第一个 select 语句中选择的数据

所以在这个例子中,我将总共 68 条新记录写入项目符号,17 个产品代码中的每一个都有 4 个。

我认为我需要一个存储过程来执行此操作,但已经搜索并且无法围绕我查看的结果进行搜索。非常感谢任何帮助。

68 条记录将作为新记录写入项目符号表。所选记录可能填充了四个字段的全部或任意组合:

product_code、catalogue_category_id、bullet_text、sort_sequence

本质上,我希望复制选定的记录,但 id 和产品代码除外。例如说我有 3 个产品代码,

10002、10003 和 10004

使用我的第二个 select 语句返回,然后我将获得 12 条新记录,3 组 4 组几乎与我的第一个 SELECT 语句中的初始 4 条相同,ID 将自动递增,产品代码将为 L

前 4 条新记录为 10002
10003 用于接下来的 4 条新记录
最后 4 个为 10004

我将编写为每个字段选择的任何内容。使用您的示例,其中选择的 4 条记录中有 2 条在 catalogue_category_id 字段中具有数据,那么 68 条新记录中的 34 条将在 catalogue_category_id 字段中具有数据。

4

1 回答 1

0

正如我在这里回答的那样,您所需要的只是CROSS JOIN

INSERT INTO bullets (product_code, catalogue_category_id, bullet_text, sort_sequence) 
SELECT m.product_code, b.catalogue_category_id, b.bullet_text, b.sort_sequence
  FROM bullets b CROSS JOIN master m
 WHERE b.product_code = 10001
   AND m.product_group = 3
   AND m.product_code <> 10001;

这是SQLFiddle演示

于 2013-07-14T19:17:23.670 回答