2010-08-06 42 views
1

我使用MySQL和我試圖構造查詢執行以下操作:問題的SQL查詢

我:

Table1 [ID,...] 
Table2 [ID, tID, start_date, end_date,...] 

我從我的查詢需要的是:

Select all entires from Table2 Where Table1.ID=Table2.tID 
**where at least one** end_date<today. 

我現在的工作方式是,如果表2包含(例如)5個條目,但其中只有一個是end_date <今天那麼這是唯一的條目將被返回,而我想有另一個(到期d)返回的人也是如此。我有實際的查詢和所有的聯接運行良好,我只是無法弄清楚它的**部分。

任何幫助將是偉大的!

謝謝!

回答

3
SELECT * FROM Table2 
WHERE tID IN 
    (SELECT Table2.tID FROM Table1 
    INNER JOIN Table2 ON Table1.ID = Table2.tID 
    WHERE Table2.end_date < NOW 
) 

子查詢將選擇與您的where子句匹配的所有tId。主查詢將使用此子查詢來過濾表2中的條目。

注意:使用內部聯接將過濾表1中的所有行,表2中沒有匹配的條目。這是沒有問題的;這些條目無論如何都不會與where子句匹配。

+0

是的,這就像一個魅力工作!非常感謝! – user387302 2010-08-06 21:03:51

0

也許,也許,你可能會創建一個子查詢來加入你的實際表,並且在這個子查詢中你使用了一個count(),它可以在你以後的where子句中使用。