【问题标题】:Variable LIMIT from other SELECT来自其他 SELECT 的变量 LIMIT
【发布时间】:2019-03-08 18:06:23
【问题描述】:

我有一个表 av 与列 ID, amount

还有一个users 表,其中包含ID, timestamp

现在每张优惠券都与first x 用户相关(按时间戳排序),其中x 是特定优惠券的amount 值。

我用一个小例子做了一个dbfiddle

我的预期结果:

voucherID    userID
11           10
12           10
12           11

为了更好地理解:

管理员创建了一个凭证,该凭证应该发给前 X 个注册用户。每张代金券都有不同的X

【问题讨论】:

  • uSerID 上的凭证ID 是什么关系?
  • 您在设置 dbfiddle 方面做得很好。关于@Bulfaitelo 的问题,您能否解释一下为什么/如何将凭证 11 和 12 与用户 10 关联?
  • 我的结果元组应该被插入到一个链接usersav的新表中。 @zedfoxus Well 优惠券 11 的金额为 1,这意味着表中的前 1 个用户。 Voucher 12 的金额为 2,即表中的前 2 个用户。
  • 我认为理想的情况是在这两者之间建立一个表格来建立这种关系
  • 问题是这两个表之间没有关系。管理员创建了一个凭证,该凭证应该发给前 X 个注册的用户。每张代金券都有不同的 X。

标签: mysql sql join limit


【解决方案1】:

我想这就是你想要的:

with
u as (
  select userID, timestampMock, 
    row_number() over (order by timestampMock) as rn
  from users
)
select
  av.voucherID, u.userID
from av
join u on u.rn <= av.amount
order by av.voucherID, u.userID

我在您的 dbfiddle 中对其进行了测试,结果是:

voucherID   userID
---------   ------
11          10
12          10
12          11

【讨论】:

  • 这是一个很好的查询。我现在记得 MySQL 8 有 CTE。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2021-03-31
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
相关资源
最近更新 更多