2016-06-20 48 views
0

我一直試圖解決這個問題,但我似乎無法做到正確。我基本上有2個樣本表:positionposition_meta忽略來自關係表上的其他用戶的行

預期結果(用戶ID:1)

------------------------------------------------ 
    id position      user_id 
------ ---------------------------- --------- 
    1 Physical Therapist Assistant   1 
    2 Brake Machine Setter    (NULL) 
    3 Community Service Manager    1 
------------------------------------------------ 

代替

----------------------------------------------- 
    id position      user_id 
------ ---------------------------- --------- 
    1 Physical Therapist Assistant   2 
    1 Physical Therapist Assistant   1 
    2 Brake Machine Setter    (NULL) 
    3 Community Service Manager    1 
    3 Community Service Manager    3 
----------------------------------------------- 

我的樣本表

Table: position 
----------------------------------------- 
    id position         
------ --------------------------------- 
    1 Physical Therapist Assistant    
    2 Brake Machine Setter      
    3 Community Service Manager    
----------------------------------------- 

Table: position_meta 
------------------------------ 
    id user_id position_id 
------ ------- ------------- 
    1  1    1 
    2  2    1 
    3  3    3 
    4  1    3 
------------------------------ 

您可以看到,一些用戶在position_meta中有條目,而有些則沒有。但是否可以顯示所有職位,無論他們是否在position_meta中有條目。但是,如果當前用戶(例如user_id 1)在position_meta中有條目,它將顯示它並忽略可能已經選擇了相同位置(防止重複行)的任何其他用戶行。

如果position_meta項是從另一個user_id完全(不user_id 1),然後顯示NULL或任何其擁有它,因爲我不會無論如何檢查它的用戶。

這是MySQL可以做的事嗎?

編輯: 這是我使用的查詢其得到錯誤的結果:

SELECT p.id, p.position, pm.user_id FROM `position` p 
    LEFT JOIN position_meta pm ON p.id = pm.position_id 
    ORDER BY p.id 

回答

1

根據您您所提供的預期輸出(這本來是有益的,如果你已經表明你用得到的SQL在你的結果,即使是錯誤的)...

SELECT p.id, p.position, pm.uer_id 
FROM position p 
LEFT JOIN position_meta pm 
ON p.id=pm.position_id 
AND pm.user_id=1 

注意,過濾表達式是連接語句的一部分,而不是where子句。

+0

當然。我真是個白癡。感謝一堆@symcbean。 – enchance