我的數據庫由2個表組成。我使用MySQL。sql select,得到應得的汽車
表1
汽車= ID(INT,PrimaryKey的),REG(INT),類型(INT)
表2
作業= REF(INT,PrimaryKey的),ID(INT ),日期(日期)
我需要一個SELECT語句,它會讓我所有在過去3周內沒有工作的汽車。
(即:如果在過去3周的車一直沒有工作,那麼汽車(ID)將返回)
我知道會有幾種方法可以做到這一點但我不是在SQL尚未達到的速度:<
我的數據庫由2個表組成。我使用MySQL。sql select,得到應得的汽車
表1
汽車= ID(INT,PrimaryKey的),REG(INT),類型(INT)
表2
作業= REF(INT,PrimaryKey的),ID(INT ),日期(日期)
我需要一個SELECT語句,它會讓我所有在過去3周內沒有工作的汽車。
(即:如果在過去3周的車一直沒有工作,那麼汽車(ID)將返回)
我知道會有幾種方法可以做到這一點但我不是在SQL尚未達到的速度:<
這是一個很好的用例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
);
我不知道你使用的是什麼樣的Oracle,但是這對Oracle有效。在其他的風格中,你必須以不同的方式計算出你的日期(也許連接語法有點不同)。
select *
from cars c
left join jobs j
on j.id = c.id
where j.date < sysdate - 21
如果兩個表之間的聯繫是jobs.ref,那麼SQL可能是這樣的:
select id from cars where id in
(select ref from jobs where date < DATE_SUB(NOW(),INTERVAl 21 DAY)
表之間的鏈接,如果實際上id(int) – brux 2010-11-19 15:20:56
這將返回超過3個星期前有工作的汽車。 OP想要的是看過去3周**沒有工作的汽車。 – 2010-11-19 15:26:06
嗨,謝謝,這是完美的。 – brux 2010-11-19 15:27:46