使用749016插入最新客户记录至orders表遇问题求助
解决将Customers最新记录插入Orders表的问题
嘿,我来帮你梳理下问题所在,然后给出靠谱的解决方案:
你现有语句的问题分析
第一条SQL的问题
你用的last_insert_id(CusID)完全用错了——这个函数是用来获取当前会话里最近一次INSERT操作生成的自增ID,不是用来查询表中已存在的最大CusID的。再加上你没有限制只选最新的客户记录,还和products做了隐式交叉连接,结果就变成把所有客户和所有产品的组合都插入到orders表了,这就是为什么会给所有客户插订单。第二条SQL的语法错误
这条语句的问题出在表连接的写法上,LIMIT 1之后不能直接跟, products,MySQL(我猜你用的是MySQL)不支持这种语法。你需要先正确获取到最新的客户记录,再和products做关联。
正确的SQL语句
如果你想要给最新的客户插入所有产品的订单,可以用下面的语句:
INSERT INTO orders (CusID, ProdID) SELECT c.CusID, p.ProdID FROM (SELECT CusID FROM customers ORDER BY CusID DESC LIMIT 1) c CROSS JOIN products p;
这里的逻辑是:
- 先通过子查询
(SELECT CusID FROM customers ORDER BY CusID DESC LIMIT 1)获取到customers表中最新的那条记录的CusID(假设CusID是自增主键,按倒序取第一条就是最新的) - 然后用
CROSS JOIN把这个客户和所有产品做关联,这样就只会给这个最新客户生成所有产品的订单记录
如果你只需要给最新客户插入特定产品的订单,只要给products加个WHERE条件就行:
INSERT INTO orders (CusID, ProdID) SELECT c.CusID, p.ProdID FROM (SELECT CusID FROM customers ORDER BY CusID DESC LIMIT 1) c JOIN products p ON p.ProdID = 你的目标产品ID;
额外说明
如果你的customers表不是用CusID来判断最新记录(比如有create_time字段),那把子查询里的排序条件换成对应的字段就行,比如:
SELECT CusID FROM customers ORDER BY create_time DESC LIMIT 1
内容的提问来源于stack exchange,提问作者mechagojira
相关产品推荐
相关产品推荐

