sql选择,获得应该工作的汽车

时间:2010-11-19 15:08:08

标签: sql mysql database

我的数据库由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的速度:<

3 个答案:

答案 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)