我成功地从msql编辑器(phpmyadmin)执行了以下sql代码,并与一位客户(其中Customer No
= 1)对其进行了测试。我现在需要为所有客户运行sql脚本。
START TRANSACTION;
INSERT INTO `addresses` (`AddressLine1`,`CityID`,`ProvStateCode`,`AddressPostCode`,`CountryIso`) SELECT `Bill To Address`,`Bill To City`,`Bill To Province`,`Bill Code`,`Country` FROM `pdx_customers` where `Customer No`=1;
SELECT @last_id := LAST_INSERT_ID();
SELECT `Customer No` FROM `pdx_customers`
INSERT INTO `customer_addresses` (`CustID`,`AddressID`,`AddressTypeID`) Values(1,@last_id,1);
COMMIT;
似乎我需要创建一个存储过程?在一个循环中,我需要为Customer No
表中的每一行动态获取pdx_customers
,并在插入命令的Values子句中输入Values(@ CustID,@ last_id,1)。不知道我该怎么做?
任何帮助将不胜感激。 谢谢
答案 0 :(得分:0)
您可以使用以下语句创建循环:
start transaction;
while counter < max do
insert into . . . ;
set counter=counter+1;
end while;
答案 1 :(得分:0)
这是一个非常普遍的问题,我想说在sql中循环几乎不是一个好主意。这是另一种选择,您可能会认为不好,因为它确实引入了新列。我已经在一些应用程序中使用过它,它使事情变得非常简单。但这确实取决于您的用例,所以不会适合所有人。
1)首先,在地址表中添加一个新列,将其命名为不会被任何人看到的表,例如TempInsertId。
2)编写新地址时,在TempInsertId列中包含CustomerId
3)现在,您可以轻松地读回AddressId和CustomerId并将其写入CustomerAddress表
4)如果愿意,请进行最终更新以将TempInsertId设置回null。
正如我所说,并非在所有情况下都主张这样做,但这可以是解决问题的非常简单的方法。