从SQL中的表获取LIMIT值

问题描述 投票:0回答:1

我正在尝试在SQL中运行插入语句固定的时间。到目前为止,我已经尝试过了,它可以按我的意愿工作,但是有什么方法可以将这两个部分结合起来吗?

INSERT INTO assigns (AgencyName, ScoutID, RequestID)
SELECT AgencyName, ScoutID, RequestID
FROM employs NATURAL JOIN Scout NATURAL JOIN agency_response NATURAL JOIN Request
WHERE Answer = @option AND AgencyName = @agency_name
LIMIT 1;

这将插入分配表1次。但是我从NATURAL JOIN的表中获得了所需的LIMIT值。在这种情况下,它存储在NumberOfScouts中。例如,以下返回8,而我想限制为8。

SELECT NumberOfScouts
FROM employs NATURAL JOIN Scout NATURAL JOIN agency_response NATURAL JOIN Request
WHERE Answer = @option AND AgencyName = @agency_name;

有没有办法从我使用的表中获取LIMIT中使用的整数值。我试图将LIMIT放到查询的上部,但是它给出了语法错误。

mysql sql limit sql-insert
1个回答
0
投票

您可以使用窗口功能:

WITH asr as (
      SELECT ?.AgencyName, ?.ScoutID, ?.RequestID, ?.NumberOfScouts,
             ROW_NUMBER() OVER (ORDER BY ?.AgencyName) as seqnum
      FROM employs e JOIN
           Scout s
           ON ?? JOIN    -- JOIN conditions here
           agency_response ar
           ON ?? JOIN    -- JOIN conditions here
           Request r
           ON ??         -- JOIN conditions here
     WHERE ?.Answer = @option AND ?.AgencyName = @agency_name
    )
SELECT ?.AgencyName, ?.ScoutID, ?.RequestID
FROM asr
WHERE seqnum <= NumberOfScouts;

注意:

  • 使用表别名的缩写,是表名。
  • 限定所有列引用,以便您-和其他所有人-知道表列来自何处。
  • JOINON / USING一起使用,以便知道哪些列用于JOIN

我将NATURAL JOIN描述为可憎的,因为它没有为JOIN条件使用正确声明的外键关系。另外,我的大多数表都有createdAtcreatedBy列,这会混淆所谓的“自然”联接。

© www.soinside.com 2019 - 2024. All rights reserved.