从sql中的表中获取限制值

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

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

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

这将在分配表中插入1次。但是我在表中有一个期望的极限值,它是从自然连接得到的。在这种情况下,它存储在numberofscouts中。例如,下面返回8,我想限制为8。

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

有没有办法从我使用的表中得到limit中使用的整数的值。我试图限制查询的上限,但它给出了语法错误。

yqkkidmi

yqkkidmi1#

可以使用窗口函数:

  1. WITH asr as (
  2. SELECT ?.AgencyName, ?.ScoutID, ?.RequestID, ?.NumberOfScouts,
  3. ROW_NUMBER() OVER (ORDER BY ?.AgencyName) as seqnum
  4. FROM employs e JOIN
  5. Scout s
  6. ON ?? JOIN -- JOIN conditions here
  7. agency_response ar
  8. ON ?? JOIN -- JOIN conditions here
  9. Request r
  10. ON ?? -- JOIN conditions here
  11. WHERE ?.Answer = @option AND ?.AgencyName = @agency_name
  12. )
  13. SELECT ?.AgencyName, ?.ScoutID, ?.RequestID
  14. FROM asr
  15. WHERE seqnum <= NumberOfScouts;

笔记:
使用表别名,表别名是表名的缩写。
限定所有列引用,以便您和其他所有人都知道表列的来源。
使用 JOINON / USING 所以你知道什么列用于 JOIN s。
我描述 NATURAL JOIN 因为它没有为 JOIN 条件。另外,我的大多数table都有 createdAt 以及 createdBy 会混淆所谓“自然”联接的列。

展开查看全部

相关问题