如何在 PostgreSQL 的顶层(父级)设置 Where 子句?
How to set a Where clause on the top (parent) level in PostgreSQL?
我对 PostgreSQL 比较陌生。
我的问题是我有他们预订的公寓,我需要 select 那些在给定范围内可用(没有预订)的公寓。
Reservations table 包含字段 apartmentId(引用公寓 table)、userId 和 datesReserved,即 tstzrange
。
出于这些目的,我正在执行此查询:
SELECT * FROM apartments
JOIN appointments ON appointments.aparmentId = apartments.id
WHERE NOT(datesreserved && '[2020-12-15T15:00:00.000Z, 2020-12-17T16:00:00.000Z)');
但我得到的是经过过滤的约会 - 那些不包含值 [2020-12-15T15:00:00.000Z, 2020-12-17T16:00:00.000Z)
.
的约会
据我研究,有顶级 where 和 inner-level,据我所知,这个查询应该给我顶级结果——那些 不包含所提供的公寓范围.
在这种情况下我理解正确吗?
我认为你不需要在这里存在。实际上,您没有“顶级”,表是对等的。
SELECT * FROM apartments WHERE NOT EXISTS (
SELECT 1 from appointments WHERE appointments.aparmentId = apartments.id and datesreserved && '[2020-12-15T15:00:00.000Z, 2020-12-17T16:00:00.000Z)'
);
我对 PostgreSQL 比较陌生。
我的问题是我有他们预订的公寓,我需要 select 那些在给定范围内可用(没有预订)的公寓。
Reservations table 包含字段 apartmentId(引用公寓 table)、userId 和 datesReserved,即 tstzrange
。
出于这些目的,我正在执行此查询:
SELECT * FROM apartments
JOIN appointments ON appointments.aparmentId = apartments.id
WHERE NOT(datesreserved && '[2020-12-15T15:00:00.000Z, 2020-12-17T16:00:00.000Z)');
但我得到的是经过过滤的约会 - 那些不包含值 [2020-12-15T15:00:00.000Z, 2020-12-17T16:00:00.000Z)
.
据我研究,有顶级 where 和 inner-level,据我所知,这个查询应该给我顶级结果——那些 不包含所提供的公寓范围.
在这种情况下我理解正确吗?
我认为你不需要在这里存在。实际上,您没有“顶级”,表是对等的。
SELECT * FROM apartments WHERE NOT EXISTS (
SELECT 1 from appointments WHERE appointments.aparmentId = apartments.id and datesreserved && '[2020-12-15T15:00:00.000Z, 2020-12-17T16:00:00.000Z)'
);