从sql中的表中获取限制值

hyrbngr7  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(282)

我正在尝试在sql中运行insert语句一段固定的时间。到目前为止,我已经尝试了这一点,它的工作,我想,但有没有办法结合这两个部分?

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次。但是我在表中有一个期望的极限值,它是从自然连接得到的。在这种情况下,它存储在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中使用的整数的值。我试图限制查询的上限,但它给出了语法错误。

yqkkidmi

yqkkidmi1#

可以使用窗口函数:

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 s。
我描述 NATURAL JOIN 因为它没有为 JOIN 条件。另外,我的大多数table都有 createdAt 以及 createdBy 会混淆所谓“自然”联接的列。

相关问题