簡體   English   中英

有沒有辦法根據 mySQL 中另一個的結果來限制查詢?

[英]Is there a way to limit a query based on the result of another in mySQL?

所以我有一個正在使用的查詢,但我想在我的第二個查詢的限制中使用第一個查詢的計數,這可能嗎? 例如

 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

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

  • 在准備好的語句中,可以使用?指定 LIMIT 參數? 占位符標記。
  • 在存儲的程序中,可以使用整數值的例程參數或局部變量來指定 LIMIT 參數。

所以你不能使用表達式或子查詢或類似的東西。

您可以運行第一個查詢,將結果提取到一個變量中,然后在第二個查詢中使用該變量。

您可以將其設為變量並在第二段代碼中使用它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM