我的数据库由2个表组成。我正在使用MySQL。
表1
cars = id(int,PRIMARYKEY),reg(int),type(int)
表2
jobs = ref(int,PRIMARYKEY),id(int),date(date)
我需要一个SELECT语句,它会让我收到过去3周内没有工作的所有车辆。
(即:如果一辆车在过去3周内没有工作,那么该车(id)将被退回。)
我知道有几种方法可以做到这一点但是我还没有达到sql的速度:<
答案 0 :(得分:2)
这是NOT EXISTS
的一个很好的用例:
select c.id,c.reg,c.type
from cars c
where not exists
(
select NULL
from jobs j
where j.id = c.id
and j.date >= CURRENT_DATE - INTERVAL 3 WEEK
);
答案 1 :(得分:0)
我不知道您使用的是什么样的Oracle,但这可以在Oracle上运行。在其他风格中,您必须以不同的方式计算出日期(并且连接语法可能稍有不同)。
select *
from cars c
left join jobs j
on j.id = c.id
where j.date < sysdate - 21
答案 2 :(得分:0)
如果两个表之间的链接是jobs.ref,那么sql可能是这样的:
select id from cars where id in
(select ref from jobs where date < DATE_SUB(NOW(),INTERVAl 21 DAY)