【问题标题】:Is there a way to limit a query based on the result of another in mySQL?有没有办法根据 mySQL 中另一个的结果来限制查询?
【发布时间】:2022-01-26 00:04:08
【问题描述】:

所以我有一个正在使用的查询,但我想在我的第二个查询的限制中使用第一个查询的计数,这可能吗?例如

 SELECT 
       Round(0.07 * Count(*), 0)          AS number_required
FROM   trinkets t
       LEFT JOIN orders o
              ON p.order_id = o.id
WHERE  o.trinket_id IN ( 27 )
       AND t.valid_from >= '2022-01-01'
       AND t.valid_from <= '2022-01-31'

所以我在第一个查询中得到了一个数字,我想这样使用它。

SELECT
  Rand() AS 'random',
  t.order_id,
  t.serial_number,
  t.valid_from,
  t.valid_till AS 'valid_to',
  comp.org_name AS 'subject_org',
FROM
  trinkets t
  LEFT JOIN orders o ON t.order_id = o.id
  LEFT JOIN companies comp ON o.company_id = comp.id
WHERE
  t.valid_from >= '2022-01-01'
  AND (
    o.status = 3
    AND o.reason IN (6, 11)
  )
  AND o.trinket_id = 27
ORDER BY
  random ASC
limit number_required

【问题讨论】:

    标签: mysql sql subquery limit


    【解决方案1】:

    您可以将其设为变量并在第二段代码中使用:

    SET @number_required = (SELECT ROUND(0.07 * COUNT(*), 0) AS number_required
                            FROM   trinkets t
                            LEFT JOIN orders o ON p.order_id = o.id
                            WHERE o.trinket_id IN ( 27 )
                            AND t.valid_from >= '2022-01-01'
                            AND t.valid_from <= '2022-01-31')
    

    注意:将其称为@number_required 而不是number_required

    【讨论】:

      【解决方案2】:

      https://dev.mysql.com/doc/refman/8.0/en/select.html

      • 在准备好的语句中,LIMIT 参数可以使用? 占位符标记。
      • 在存储程序中,可以使用整数值例程参数或局部变量指定 LIMIT 参数。

      所以你不能使用表达式或子查询或类似的东西。

      您可以运行第一个查询,将结果提取到一个变量中,然后在第二个查询中使用该变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 2015-07-19
        • 2019-09-28
        • 2017-09-30
        • 2021-03-23
        相关资源
        最近更新 更多