Sql 可以为联接表设置限制吗?
是否可以为联接的主表设置限制1,但仍然不会对查询进行太多更改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
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");