我正在尝试在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放到查询的上部,但是它给出了语法错误。
您可以使用窗口功能:
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;
注意:
JOIN
与ON
/ USING
一起使用,以便知道哪些列用于JOIN
。我将NATURAL JOIN
描述为可憎的,因为它没有为JOIN
条件使用正确声明的外键关系。另外,我的大多数表都有createdAt
和createdBy
列,这会混淆所谓的“自然”联接。