2012-02-02 38 views
1

我有兩個表,一個與筆記mysql如何做一個內部聯接與第二個內部聯接到同一個表?

id, note, client#, flag, employee#, date 

其他與員工

id, employee# 

我想找到所有具有「N」標誌的音符,但沒有一個「Y 「標誌爲同一日期和客戶#,但僅限員工表中的員工。

例如,我開始:

1 mynote 123 Y abc 1/1/2011 
2 mynote 123 N abc 1/1/2011 
3 mynote 124 N abc 1/1/2011 
4 mynote 124 N ccc 1/1/2011 

(在我的員工表我有員工ABC)

所以我開始:

SELECT * from notes a inner join employees b on a.employee = b.employee WHERE a.flag = 'N' 

這工作,我得到什麼樣子就像只有員工當前在僱員表中的合理清單(例如,只有abc - 上面的記錄2和3)。

現在,我只需要取回記錄3,因爲它是「N」記錄並且沒有匹配的「Y」記錄用於同一日期和客戶端#。

我似乎無法得到額外的部分想出來添加它。

謝謝。

+0

爲什麼不只是在'WHERE'子句中刪除'flag'條件呢?這不會給你你想要的東西嗎? – 2012-02-02 18:08:41

+0

我剛纔澄清了一點,我嘗試了下面的查詢,但他們沒有工作,所以我認爲我以前的解釋不清楚。 – 2012-02-02 21:16:00

回答

1

嘗試使用這個聯盟。這樣你可以使用2種不同的查詢。

0

如果將flag =表達了ON條款,它變得更簡單:

SELECT * from employees e 
inner join notes n1 
on n1.employee = e.employee 
    AND n1.flag = 'N' 
inner join notes n2 
ON n2.employee = e.employee 
    AND n2.client = n1.client AND n2.date = n1.date AND n2.flag = 'Y' 

我也是從dasblinkenlight借用了改進別名。