簡體   English   中英

我如何總是從一個表中提取數據,又如何從第二個表中提取數據(如果MySQL中存在的話)?

[英]How do I always pull data from one table, but also pull data from a second table if it's there in 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不匹配。

我該如何解決查詢問題呢?

這就是手冊所說的,只是堅持使用MySQL ...“如果在ON或LEFT JOIN的USING部分中沒有正確的表匹配行,則將所有列設置為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

這也很清楚,為什么要將用戶名條件從where子句移動到ON子句,就像Andrew所說的...

您需要left join ,但是必須注意where子句中的條件。 為了使left join正常工作, 第二個表上的條件必須位於on子句中:

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

第一個表上的條件應放在where子句中。

 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM