我在Postgres 9.5数据库中有以下表格:
rate_adjust
Column | Type | Modifiers
-----------+---------+----------------------------------------------
id | integer | not null default nextval('product_days_id_seq'::regclass)
name | text |
amount | integer |
product_id | integer |
type | integer |
Indexes:
"pk_product_days" PRIMARY KEY, btree (id)
factor_calendar
Column | Type | Modifiers
----------------+-----------------------------+-----------------------------------------------------
id | integer | not null default nextval('product_id_seq'::regclass)
from_day | integer |
thru_day | integer |
created_at | timestamp without time zone | default now()
updated_at | timestamp without time zone | default now()
rate_adjust_id | integer |
Indexes:
"pk_product" PRIMARY KEY, btree (id)
Foreign-key constraints:
"fk_rate_adjust" FOREIGN KEY (rate_adjust_id) REFERENCES rate_adjust(id)
我需要获取rate_adjust
表中没有foreign_key
的{{1}}记录,或者他们的日期应该在factor_calendar
和from_day
} 范围
我正在尝试使用以下查询,但也返回不在范围内的thru_day
记录
rate_adjust
SELECT *
FROM rate_adjust AS rad
LEFT JOIN factor_calendar as fc ON (
rad.id = fc.rate_adjust_id
WHERE rad.product_id = p_id
AND start_day_id < end_day_id AND NOT (
( fc.from_day > start_day_id AND fc.from_day > end_day_id)
OR ( fc.thru_day < start_day_id AND fc.thru_day < end_day_id)
)
中存储的数据是
factor_calendar
id | from_day | thru_day | rate_adjust_id
—--+----------+----------+----------------
1 | 14 | 17 | 1
2 | 1 | 3 | 2
3 | 1 | 7 | 3
中存储的数据是
rate_adjust
对于 id | name | type | amount | product_id
—--+------------------------+------+------+------------—
1 | rateadjust 1 | 0 | 15 | 3
2 | rateadjust 2 | 0 | 15 | 3
3 | rateadjust 3 | 1 | 15 | 3
4 | rateadjust 4 | 1 | 22 | 3
以及query
和p_id = 3
以及start_day_id = 4
的上述end_day_id = 15
,我希望以下的rate_adjust与
我会返回id(s)
1
和2
以及4
但是,id
3
的评价也会被退回
问题
如何修改我的查询以返回预期的结果请考虑我也欢迎任何以plpgsql
语言处理此问题的建议
答案 0 :(得分:0)
我相信你想要pkill -e -9 "$pattern" | sed -re 's/^(\S+).*/Killed: \1/'
- 基于你的解释,而不是样本数据。
以下查询获取4-15期间内有一天的not exists
条记录:
rate_adjust
覆盖整个时期只是对逻辑的一点修改。
此外,这不包括select ra.*
from rate_adjust ra
where not exists (select 1
from factor_calendar fc
where fc.rate_adjust_id = ra.id and
fc.from_date <= 15 and
fc.to_date >= 4
);
。您的解释没有提及产品,根据提供的数据,它似乎是多余的。但是,平等条件是微不足道的。