2014-03-04 55 views
1

我有2個表文章和意見,
每個崗位都有ID,標題,CATEGORY_ID和USER_ID 每個評論有ID,評論,POST_ID和USER_ID如何在主表濾波器左連接查詢

我要列出具有所有帖子CATEGORY_ID = 2和comment.user_id = 1

CREATE TABLE post 
    (`ID` int, `TITLE` varchar(9), `CATEGORY_ID` int, `USER_ID` int) 
; 

INSERT INTO post 
    (`ID`, `TITLE`, `CATEGORY_ID`, `USER_ID`) 
VALUES 
    (1, 'My post A', 1, 1), 
    (2, 'My post B', 2, 1), 
    (3, 'My post C', 2, 2) 
; 

CREATE TABLE comment 
    (`ID` int, `COMMENT` varchar(12), `POST_ID` int, `USER_ID` int) 
; 

INSERT INTO comment 
    (`ID`, `COMMENT`, `POST_ID`, `USER_ID`) 
VALUES 
    (1, 'My comment X', 1, 1), 
    (2, 'My comment Y', 2, 1), 
    (3, 'My comment Z', 1, 2) 
; 

該命令獲取的所有帖子包括一個與CATEGORY_ID = 1

SELECT post.*, comment.comment, comment.post_id, comment.user_id c_user_id 
FROM post 
LEFT JOIN COMMENT 
ON POST.id = COMMENT.post_id 
AND COMMENT.user_id=1 
AND POST.category_id =2 

我得到這個

+---------+-----------+-------------+---------+--------------+---------+-----------+ 
| USER_ID | TITLE | CATEGORY_ID | USER_ID | COMMENT | POST_ID | C_USER_ID | 
+---------+-----------+-------------+---------+--------------+---------+-----------+ 
| 1  | MY POST A | 1   | 1  | null   | null | null  | 
| 2  | MY POST B | 2   | 1  | My Comment Y | 2  | 1   | 
| 1  | MY POST C | 2   | 2  | null   | null | null  | 
+---------+-----------+-------------+---------+--------------+---------+-----------+ 

,我想獲得這個(所有文章與CATEGORY_ID = 2這樣2條記錄,其中出現USER_ID註釋和其他註釋如下空:

+---------+-----------+-------------+---------+--------------+---------+-----------+ 
| USER_ID | TITLE | CATEGORY_ID | USER_ID | COMMENT | POST_ID | C_USER_ID | 
+---------+-----------+-------------+---------+--------------+---------+-----------+ 
| 2  | MY POST B | 2   | 1  | My Comment Y | 2  | 1   | 
| 1  | MY POST C | 2   | 2  | null   | null | null  | 
+---------+-----------+-------------+---------+--------------+---------+-----------+ 

預先感謝您的幫助

回答

1

該規則關於把條件on子句中的left outer join秒。 。 。那麼它適用於第二個表的條件,而不是第一個。所以,把這種狀態在where條款:

SELECT post.*, comment.comment, comment.post_id, comment.user_id c_user_id 
FROM post LEFT JOIN 
    COMMENT 
    ON POST.id = COMMENT.post_id AND COMMENT.user_id=1 
WHERE POST.category_id = 2; 

的方式left outer join作品,概念是說:以一個排在第一個表。然後查找第二個表中的所有匹配行,並受on條件的約束。保持所有比賽。如果沒有匹配,則保留第一個表中的行。

猜猜看是什麼。即使條件過濾第一個表中的行,這仍然是邏輯。因此,根據第一個表中的條件篩選left outer join不起作用。

所有這一切同樣適用於right outer join s,所有表格參照都是相反的。

+0

感謝您的解釋,正是我想要的@GordonLinoff – klark