显示2个表中的所有数据,即使它们没有相同的数据

时间:2012-10-13 15:45:03

标签: mysql

我有2个表格,我想加入以获取所有数据,如果doc_name tb1doc_re相同,结果也会显示doc_ty

tb1                        tb2
=======================    ========================  
|id_1|doc_name|doc_url|    | id | doc_re | doc_ty |
=======================    ========================
|  1 |  doc2  | url2  |    |  1 | doc1   | ty1    |
|  2 |  doc5  | url5  |    |  2 | doc2   | ty2    |
|  3 |  doc6  | url6  |    |  3 | doc5   | ty5    |
|  4 |  doc7  | url7  |    ========================
=======================

因此,从表中可以看出,示例结果为:doc2 url2 ty2 doc5 url4 ty5 doc6 url6 blank doc7 url7 blank

这是代码:

$query = mysql_query(" SELECT 
                             w.doc_url
                             s.doc_ty,
                       FROM
                             tb2 s
                       INNER JOIN 
                             tb1 w  ON s.doc_re = w.doc_name ")

但是,从该查询中我得到两个表具有相同数据的结果(仅来自示例doc2和doc5)。如果我还想获得doc6和doc 7,我应该再次查询ON s.doc_re != w.doc_name吗? 谢谢你:))

3 个答案:

答案 0 :(得分:1)

你应该使用左(外)联接来做到这一点。请参阅链接http://www.w3schools.com/sql/sql_join_left.asp

答案 1 :(得分:1)

LEFT JOIN是你想在这里使用的。它包括左侧的所有行,无论它们是否存在于右侧,如果我们将其视为左侧的一个表和右侧的一个表。所以......

SELECT tbl1.doc_name, tbl1.doc_url, tbl2.doc_ty 
FROM tbl1 LEFT JOIN tbl2
ON tbl1.doc_name = tbl2.doc_re; 

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

答案 2 :(得分:0)

内连接仅返回双方的结果。要包含不匹配的结果,您应该使用外部联接。

在您的示例中,如果您从INNER JOIN更改为LEFT JOIN,您将看到您期望的行为。

看看这个有助于理解联接:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins