2017-08-31 71 views
2

我有這個MySQL查詢與幾個表上的多個連接。其中一張表是一份工作清單。我想在第一個工作日期提供where條款。在第一個工作日期的MySQL查詢

SELECT  leads.*, orders.*, jobs.* 
FROM  leads 
LEFT JOIN orders ON leads.lead_id = orders.lead_id 
LEFT JOIN jobs ON orders.order_id = jobs.order_id 
WHERE  (first_job_date) >= $date 

現在我不明白如何從所有這些工作得到first_job_date。 心中已經嘗試:

first_job_date = (
    SELECT job_date 
    FROM jobs 
    WHERE jobs.order_id = orders.order_id 
    ORDER BY jobs.job_date 
    LIMIT 1 
) 

但它從來沒有工作,雖然這SELECT語句的工作,當我把它裏面SELECT查詢。

在此先感謝您的幫助。

+0

其實,我不知道爲什麼你的子查詢沒有工作 – Jakumi

+0

@Jakumi我使用的子查詢,但該方法你在你的答案中提到,它的工作:) – zeus

+0

「它從來沒有工作」不是一個有用的診斷。它不會返回你期望的結果?它給出了一個錯誤?當謂詞需要特定日期時,爲什麼要使用LEFT JOIN,通常是從一個連接的表中得到的。 – symcbean

回答

1

如果你想從一個訂單,其第一個job_date爲> = $日期的所有作業理解問題

後更新中...

這可能是工作:

[WHERE] date > (
    SELECT MIN(temp.job_date) 
    FROM jobs temp 
    WHERE temp.order_id = jobs.order_id 
) 

或者作爲子查詢加入的ADDED

LEFT JOIN (
    SELECT temp.order_id, MIN(temp.job_date) as job_date 
    FROM jobs temp 
    GROUP BY temp.order_id 
) as first_job_date ON (
    temp.order_id=jobs.order_id) 

和你的WHERE然後你可以比較first_job_date.job_date

+0

每個訂單有多個作業 – zeus

+0

@zeus可能誤解了您的問題。更新了我的答案。 – Jakumi

+0

我不希望所有的工作,但只有那些與最短日期,這就是爲什麼你的條款 – zeus

0

爲什麼你需要一個子查詢?

這項工作?

SELECT  leads.*, orders.*, jobs.* 
FROM  leads 
LEFT JOIN orders ON leads.lead_id = orders.lead_id 
LEFT JOIN jobs ON orders.order_id = jobs.order_id 

where MIN(jobs.job_date) >= $date 

$日期 - > 「YYYY-MM-DD」

+0

但是這會給整個表的最低工作,我認爲 – zeus