如何从一个表中提取数据,如果在MySQL中存在数据,又如何从第二个表中提取数据?

时间:2014-12-04 22:07:39

标签: mysql sql

以下是我的两张表:

绿洲

+-----+-------+
| 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 不匹配。

如何修复查询以完成此操作?

3 个答案:

答案 0 :(得分:0)

这是手册所说的,只是为了坚持MySQL ...... "如果LEFT JOIN中的ON或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子句,正如安德鲁所说......

答案 1 :(得分:0)

您需要left join,但必须注意where子句中的条件。 second 表中的条件需要在on子句中left join才能生效:

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

first 表中的条件应该放在where子句中。

答案 2 :(得分: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'