2010-11-22 120 views
1

我正在與SQLite的Android工作。sqlite選擇查詢

我的數據庫有2個表:

Table 1: cars 

_id(int,pri-key) 
reg(text) 
type(text) 

Table 2: jobs 

_id(int,foreign-key) 
date(date) 

我需要一個SQLite statment這將讓我所有的汽車還沒有過去3周有一份工作。蔭實際上移植從C#應用程序,我用了這個statment(在MySQL)是

SELECT c.id, c.reg, c.type FROM buses c WHERE NOT EXISTS (SELECT NULL FROM jobs j WHERE j.id = c.id AND j.date >= CURRENT_DATE - INTERVAL 21 DAY 

但SqliteDataBase對象,我在Android平臺採用不同的格式,我將如何運行此查詢?

在此先感謝。

回答

2

我會嘗試這樣的事:

SELECT * from cars A LEFT OUTER JOIN jobs B on A._id = B._id WHERE B._id IS NULL OR B.date < date('now', '-21 days');

左外連接,確保了從汽車表中的所有值輸出(包括不符合加入條件的那些顯示 - 即在作業表中沒有條目的那些)。在WHERE標準中,過濾條件爲在作業表中沒有條目(B._id IS NULL)或超過21天的條目B.date < date('now', '-21 days')

當然,我假設,將只有1條記錄每輛車的喬布斯表。如果還有更多,您可能需要使用MAX來獲取最新日期。

工作液:SELECT * from cars A LEFT OUTER JOIN jobs B on A._id = B._id GROUP BY A._id HAVING B._id IS NULL OR MAX(B.date) < date('now', '-21 days');

+0

行不通的IM affriad – brux 2010-11-22 12:17:21

+0

我也試着從sqlite3的外殼內運行的查詢,我得到「WHERE附近的語法錯誤 – brux 2010-11-22 12:31:50

+0

順便說一句,1號車可以有很多工作 – brux 2010-11-22 12:38:42