我的数据库中有产品表,如下所示:
shop1_products
shop2_products
shop3_products
.....
....
...
shop100_products
我希望使用union
显示现场所有表格中的产品,但我认为100张表格不行。
我知道如果我们通过制作一个带有shopid列的产品表来实现它将使它变得简单。但在我的网站上 逻辑是不同的我不能这样做因为这个结构会迫使我在其他模块上做双重工作。
我正在考虑使用存储过程执行此操作,但这对于stored procedure
来说是新的。
您如何看待我们如何以有效的方式做到这一点?
如果stored procedure
最好这样做,那么请提供示例代码或参考链接
答案 0 :(得分:1)
do like this put all the table names in a temp table then follow these steps in while loop.
Then create a table results with all the required columns
for each @tablename
insert into results
select product name ,id,category... from @tablename
repeat
Then finally select distinct * from results
--------------------------------- CODE ------------- ----------------------------------------
create table temp(id int auto_increment primary key,tblname varchar(100));
insert into temp(tblname)
VALUES('shop1_products'),('shop2_products'),('shop3_products')...('shop100_products');
select min(id),max(id) into @vmin,@vmax from temp;
select @vmin,@vmax;
create table results(productname varchar(100),id int,category varchar(100)...);
while(@vmin <= @vmax)
Do
select tblname into @tablename from temp;
INSERT INTO results(product name ,id,category...)
select product name ,id,category... from @tablename
SET @vmin=@vmin+1;
END WHILE;
select distinct * from results;