我有3個表。一個用於用戶,一個用於帖子,另一個用於連接另外兩個表的連接表。MySQL的JOIN - 複雜Select語句
下面是連接表的一些樣本數據。
| id | user_id | post_id | timestamp |
|----|---------|---------|-----------|
| 1 | 1 | 1 | 4-17-2012 |
| 2 | 1 | 2 | 4-16-2012 |
| 4 | 2 | 2 | 4-17-2012 |
| 5 | 3 | 1 | 4-16-2012 |
|____|_________|_________|___________|
我想寫一個SELECT查詢,將做到以下幾點:
1)選擇一個用戶的所有職位與2012年4月17日
和
時間戳2)如果該用戶的連接表中沒有帖子條目,請選擇這些帖子。
所以...... 對於USER_ID = 1,後期1會被選中,但沒有發佈2,因爲後2不是2012年4月17日 對於USER_ID = 2,這兩個職位會被選中,後因1有對USER_ID = 2和POST_ID = 1的條目,並張貼2,因爲它是2012年4月17日 對於USER_ID = 3,1後不予退還,但後2會是這樣,因爲沒有爲USER_ID沒有條目= 3,POST_ID = 2
這裏是什麼,我一直想一個例子:
SELECT * FROM職位爲p LEFT JOIN posts_users爲濮上(p.post_id = pu.post_id) WHERE((pu.user_id = $ USER_ID和pu.timestamp = 2012年4月17日)OR(pu.post_id IS NULL)
如果有一個POST_ID = 3行中的職位,那就有NULL所有posts_users列,因爲LEFT JOIN,這有助於滿足#2。但是如果有任何人使用post_id = 3的posts_users條目,那麼將不會有NULL。 MySQL中有沒有辦法讓我們可以擁有#2的邏輯?
我做的這一切都在一個已經在PHP寫出來的框架,並在某種程度上這將使它很難讓我必須處理使用PHP來過濾返回的結果。請相信我。有沒有辦法對我來說,使用一個SQL語句來做到這一點,還是我去嘗試,並在PHP中的解決方法後,我得到一些其他查詢的結果?
謝謝。
帖子展望進一步,它看起來像我可以使用NOT EXISTS?我從來沒有使用過這個,我怎麼會在這種情況下使用它?再次感謝。 – MattDiamant 2012-04-17 21:54:53