sql - PostgreSQL 上的查询无法正常工作
问题描述
我创建了 2 个表,一个用于司机姓名,另一个用于他们相应的车辆,我的练习是挑选出注册日期不到一个月的司机,查询应该只挑选一个司机,但结果是它列出了尽管条件不适用于其他 2 个,但所有 3 个驱动程序:
创建架构:
create table drivers (
id serial primary key,
first_name varchar,
last_name varchar
);
create table vehicles (
id serial primary key,
make varchar,
model varchar,
registration_date date,
driver_id integer references drivers(id)
);
INSERT INTO drivers (id,first_name, last_name) VALUES (1,'John', 'Doe'),(2,'Michael', 'Doe'),(3,'Jane', 'Fonda');
INSERT INTO vehicles (make,model,registration_date, driver_id) VALUES ('Volkswagen', 'Jetta','2012-10-23',1),('Skoda', 'Octavia','2011-03-01',2),('Opel', 'Meriva','2015-08-01',3);
询问:
select d.first_name , d.last_name , v.make
from drivers d
join vehicles v
on v.driver_id= d.id
where v.registration_date::DATE - CURRENT_DATE::DATE < 30;
结果:
first_name last_name make
John Doe Volkswagen
Michael Doe Skoda
Jane Fonda Opel
解决方案
一个复杂的例子:
select
registration_date, d.first_name , d.last_name , v.make
from
drivers d
join
vehicles v
on
v.driver_id= d.id
where
make_date(extract(year from current_date)::int, extract(month from v.registration_date)::int, extract(day from v.registration_date)::int ) - current_date
between 0 and 29;
registration_date | first_name | last_name | make
-------------------+------------+-----------+------------
2012-10-23 | John | Doe | Volkswagen
使用make_date
和extract
来自日期/时间运算符/函数。我可以看到将make_date(...)
部分变成一个函数。
推荐阅读
- polymer - Polymer - 如何将 2 个 url 放入注册表 -> 搜索
- javascript - 文档未在 main.ts 中定义以运行“webpack --mode development”
- linux - 鼠标从“vim”和“less”中选择副本显示不同的结果
- docker - kubernetes 错误:无法识别“deployment.yaml”:扩展名/没有匹配项,Kind=Deployment
- javascript - 未触发 Tab 组件的 onClick
- postgresql - 在 200+ 百万条记录上提高 postgresql-9.5 的性能
- javascript - 做出反应。我的类名中的 ternar 运算符有什么问题?
- java - Apache Ignite ML 和 DL 中的 Xgboost 和 LSTM 支持
- c - #ifdef 和使用 Makefile 进行条件编译
- matlab - 将 curl 翻译成 Matlab/Webwrite