gpt4 book ai didi

MySQL - 根据列值插入多行

转载 作者:可可西里 更新时间:2023-11-01 08:06:27 26 4
gpt4 key购买 nike

我的查询正在运行,只是想知道是否有更好的方法可以在没有游标/循环/php 端的情况下执行此操作。我已经做了 5 年多的 DBA,刚刚遇到 := 声明。非常酷。

表 (tblPeople),包含人员 ID 和他们购买的门票数量。

PersonId  NumTickets
1 3
2 1
3 1

然后我想在新表 (tblTickets) 中为每个人分配单独的门票,具体取决于他们购买的门票数量。 TicketId 是一个键,自动递增列。

TicketId  PersonId
100 1
101 1
102 1
103 2
104 3

这是代码。它一遍又一遍地遍历整个 tblPeople 并递增一个名为 rowID 的新计算列。然后我根据他们在 WHERE 子句中购买的门票数量过滤掉行。我看到的问题是子查询很大,我拥有的人越多,子查询就越大。只是不确定是否有更好的写法。

INSERT INTO tblTickets (PersonId)
SELECT PersonId
FROM (
SELECT s.PersonId, s.NumTickets,
@rowID := IF(@lastPersonId = s.PersonId and @lastNumTickets = s.NumTickets, @rowID + 1, 0) AS rowID,
@lastPersonId := s.PersonId,
@lastNumTickets := s.NumTickets
FROM tblPeople m,
(SELECT @rowID := 0, @lastPersonId := 0, @lastNumTickets := 0) t
INNER JOIN tblPeople s
) tbl
WHERE rowID < NumTickets

最佳答案

我要添加一个实用程序表 Numbers,其中包含从 1 到一个人可以购买的最大票数的所有数字。然后你可以这样做:

INSERT INTO tblTickets (PersonId)
SELECT s.PersonId
FROM tblPeople s, Numbers n
WHERE n.number <= s.NumTickets

关于MySQL - 根据列值插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14208703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com