Sql 可以为联接表设置限制吗?

Sql 可以为联接表设置限制吗?,sql,postgresql,Sql,Postgresql,是否可以为联接的主表设置限制1,但仍然不会对查询进行太多更改 SELECT "rep_4hours"."hour_id", "rep_4hours"."report_date", "rep_4hours"."createdAt", "rep_4hours"."updatedAt", "rep_4hours"."teams_id", "team"."team_id" AS "team.team_id", "team"."full_name

是否可以为联接的主表设置限制1,但仍然不会对查询进行太多更改

SELECT "rep_4hours"."hour_id", 
    "rep_4hours"."report_date", 
    "rep_4hours"."createdAt", 
    "rep_4hours"."updatedAt", 
    "rep_4hours"."teams_id", 
    "team"."team_id" AS "team.team_id", 
    "team"."full_name" AS "team.full_name", 
    "team"."is_active" AS "team.is_active", 
    "team"."createdAt" AS "team.createdAt", 
    "team"."updatedAt" AS "team.updatedAt", 
    "team->masters"."master_id" AS "team.masters.master_id", 
    "team->masters"."full_name" AS "team.masters.full_name", 
    "team->masters"."comment" AS "team.masters.comment", 
    "team->masters"."date_work" AS "team.masters.date_work", 
    "team->masters"."createdAt" AS "team.masters.createdAt", 
    "team->masters"."updatedAt" AS "team.masters.updatedAt", 
    "team->masters"."teams_id" AS "team.masters.teams_id" 
    FROM "rep_4hours" AS "rep_4hours" 
    INNER JOIN "teams" AS "team" ON "rep_4hours"."teams_id" = "team"."team_id" 
    INNER JOIN "masters" AS "team->masters" ON "team"."team_id" = "team->masters"."teams_id"
    WHERE ("report_date" >= "date_work") ORDER BY "team->masters"."date_work" DESC LIMIT 10 OFFSET 0;
您可以创建派生表sub查询以限制主数据-

您可以创建派生表sub查询以限制主数据-


您可以尝试使用“限制”进行横向连接:


请注意,横向限制子查询确实需要一个ORDERBY子句,这样限制才有意义。否则,不清楚您想要的第一条记录。

您可以尝试使用限制进行横向连接:


请注意,横向限制子查询确实需要一个ORDERBY子句,这样限制才有意义。否则,不清楚您想要的第一条记录。

这是您的查询。使用子查询限制您的master,并且不要忘记包括orderby


这是你的问题。使用子查询限制您的master,并且不要忘记包括orderby


我将此标记为一个解决方案,但在此之后,我有了团队->大师的订单。Date_work DESC停止排序。您可以按masters移动订单。Date_work DESC LIMIT 10偏移量0在子查询中。可能是您的where子句条件限制数据。尝试删除where子句条件并检查输出。我将其标记为一个解决方案,但在这之后,我有了ORDERBY team->masters。Date_work DESC停止排序。您可以按masters移动订单。Date_work DESC LIMIT 10偏移量0在子查询中。可能是您的where子句条件限制数据。尝试删除where子句条件并检查输出。
SELECT "rep_4hours"."hour_id", 
    "rep_4hours"."report_date", 
    "rep_4hours"."createdAt", 
    "rep_4hours"."updatedAt", 
    "rep_4hours"."teams_id", 
    "team"."team_id" AS "team.team_id", 
    "team"."full_name" AS "team.full_name", 
    "team"."is_active" AS "team.is_active", 
    "team"."createdAt" AS "team.createdAt", 
    "team"."updatedAt" AS "team.updatedAt", 
    "team->masters"."master_id" AS "team.masters.master_id", 
    "team->masters"."full_name" AS "team.masters.full_name", 
    "team->masters"."comment" AS "team.masters.comment", 
    "team->masters"."date_work" AS "team.masters.date_work", 
    "team->masters"."createdAt" AS "team.masters.createdAt", 
    "team->masters"."updatedAt" AS "team.masters.updatedAt", 
    "team->masters"."teams_id" AS "team.masters.teams_id" 
    FROM "rep_4hours" AS "rep_4hours" 
    INNER JOIN "teams" AS "team" ON "rep_4hours"."teams_id" = "team"."team_id" 
    INNER JOIN (SELECT * FROM "masters" LIMIT 1) AS "team->masters" ON "team"."team_id" = "team->masters"."teams_id"
    WHERE ("report_date" >= "date_work") ORDER BY "team->masters"."date_work" DESC LIMIT 10 OFFSET 0;
SELECT
    r.hour_id,
    r.report_date,
    r.createdAt,
    r.updatedAt,
    r.teams_id,
    t.team_id,
    t.full_name,
    t.is_active,
    t.createdAt,
    t.updatedAt,
    m.master_id,
    m.full_name,
    m.comment,
    m.date_work,
    m.createdAt,
    m.updatedAt,
    m.teams_id,
FROM rep_4hours r
INNER JOIN teams t
    ON r.teams_id = t.team_id
INNER JOIN LATERAL
(
    SELECT m1.*
    FROM masters m1
    WHERE m1.teams_id = t.team_id
    ORDER BY <some_col>   -- LIMIT only makes sense with an ORDER BY clause
    LIMIT 1
) m
    ON TRUE
WHERE
    report_date >= date_work
ORDER BY
   m.date_work DESC
LIMIT 10 OFFSET 0;
SELECT "rep_4hours"."hour_id", 
    "rep_4hours"."report_date", 
    "rep_4hours"."createdAt", 
    "rep_4hours"."updatedAt", 
    "rep_4hours"."teams_id", 
    "team"."team_id" AS "team.team_id", 
    "team"."full_name" AS "team.full_name", 
    "team"."is_active" AS "team.is_active", 
    "team"."createdAt" AS "team.createdAt", 
    "team"."updatedAt" AS "team.updatedAt", 
    "team->masters"."master_id" AS "team.masters.master_id", 
    "team->masters"."full_name" AS "team.masters.full_name", 
    "team->masters"."comment" AS "team.masters.comment", 
    "team->masters"."date_work" AS "team.masters.date_work", 
    "team->masters"."createdAt" AS "team.masters.createdAt", 
    "team->masters"."updatedAt" AS "team.masters.updatedAt", 
    "team->masters"."teams_id" AS "team.masters.teams_id" 
FROM "rep_4hours" AS "rep_4hours" 
INNER JOIN "teams" AS "team" ON "rep_4hours"."teams_id" = "team"."team_id" 
INNER JOIN 
        (SELECT * FROM "masters" ORDER BY "date_work" DESC LIMIT 10) AS "team->masters" ON "team"."team_id" = "team->masters"."teams_id"
WHERE ("report_date" >= "date_work");