2014-12-04 42 views
1

這裏是我的兩個表:我如何總是從一個表中提取數據,但是如果MySQL中有數據,還要從第二個表中提取數據?

綠洲

+-----+-------+ 
| id | title | 
+-------------+ 
| 234 | a | 
| 235 | b | 
| 236 | c | 
+-----+-------+ 

user_collection

+----+---------+----------+------+ 
| id | oasisid | username | data | 
+--------------+----------+------+ 
| 1 | 234 | joe | blah | 
| 2 | 235 | bob | blah | 
| 3 | 236 | ted | blah | 
+----+---------+----------+------+ 

這裏是我的查詢:

SELECT * 
FROM oasis 
JOIN user_collection ON oasis.id = user_collection.oasisid 
WHERE username = 'greg' 
AND oasis.id = '234' 

我想在這裏做的是從綠洲user_collection匹配拉的一切,還要從綠洲提取信息即使在user_collection不匹配。

如何解決我的查詢做到這一點?

+2

只要讓它成爲'LEFT JOIN'。 http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/你需要將你的'USERNAME ='greg''移動到on子句。 – Andrew 2014-12-04 22:10:09

+0

@Andrew你應該把這個評論作爲答案;它解決了問題:) – Barranka 2014-12-04 22:15:15

回答

0

這就是手冊上說,只要堅持到MySQL ... 「如果沒有在右邊表中沒有匹配行或使用零件的LEFT JOIN,與所有列的列設置爲NULL是用於右表,可以利用這一點來在表中查找那些在另一個表中沒有對應行:

SELECT left_tbl.* 
    FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id 
WHERE right_tbl.id IS NULL;" 

http://dev.mysql.com/doc/refman/5.0/en/join.html

它也清楚,爲什麼要擺脫用戶名準則正如Andrew所說,ON子句的where子句...

0

你想要一個left join,但你必須要小心的where子句中的條件。在表條件需要是on子句中的left join工作:

SELECT * 
FROM oasis JOIN 
    user_collection 
    ON oasis.id = user_collection.oasisid and user_collection.username = 'greg' 
WHERE oasis.id = '234'; 

條件的第一where子句中應該去。

0
SELECT s.ome 
     , c.olumns 
    FROM table1 s 
    LEFT 
    JOIN table2 c 
    ON c.some_id = s.some_id 
    AND c.some_column = 'one thing' 
    WHERE s.some_other_column = 'another thing' 
相關問題