是否可以通过某种方式为联接表limit 1
设置masters
,但仍不会对查询进行太多更改?
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;
答案 0 :(得分:2)
您可以创建derived table
(sub-query
)来限制masters
数据-
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;
答案 1 :(得分:0)
您可以尝试使用LIMIT
进行横向连接:
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;
请注意,横向LIMIT
子查询实际上需要具有ORDER BY
子句才能使限制有意义。否则,不清楚哪个您想要的第一条记录。
答案 2 :(得分:0)
这是您的查询。使用subquery
限制您的主人,别忘了包含order by
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");