2010-11-19 50 views
0

我的數據庫由2個表組成。我使用MySQL。sql select,得到應得的汽車

表1

汽車= ID(INT,PrimaryKey的),REG(INT),類型(INT)

表2

作業= REF(INT,PrimaryKey的),ID(INT ),日期(日期)

我需要一個SELECT語句,它會讓我所有在過去3周內沒有工作的汽車。

(即:如果在過去3周的車一直沒有工作,那麼汽車(ID)將返回)

我知道會有幾種方法可以做到這一點但我不是在SQL尚未達到的速度:<

回答

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 
); 
+0

嗨,謝謝,這是完美的。 – brux 2010-11-19 15:27:46

0

我不知道你使用的是什麼樣的Oracle,但是這對Oracle有效。在其他的風格中,你必須以不同的方式計算出你的日期(也許連接語法有點不同)。

select * 
from cars c 
left join jobs j 
    on j.id = c.id 
where j.date < sysdate - 21 
+0

IM使用MySQL數據庫 – brux 2010-11-19 15:21:18

+0

即使你將'sysdate-21'翻譯成MySQL,它也不會給你所需的數據。這將返回超過3周前有工作的汽車,而不是在過去3周內沒有工作的汽車。 – 2010-11-19 15:29:42

+0

那麼,它會返回過去3周內沒有工作的所有東西。包括根本沒有工作的汽車。不是我所要求的。 – gnuchu 2010-11-19 15:56:37

0

如果兩個表之間的聯繫是jobs.ref,那麼SQL可能是這樣的:

select id from cars where id in 
    (select ref from jobs where date < DATE_SUB(NOW(),INTERVAl 21 DAY) 
+0

表之間的鏈接,如果實際上id(int) – brux 2010-11-19 15:20:56

+0

這將返回超過3個星期前有工作的汽車。 OP想要的是看過去3周**沒有工作的汽車。 – 2010-11-19 15:26:06