0

我有 2 个表,我想加入以获取所有数据,如果doc_name与结果tb1相同,doc_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吗?谢谢你 :)

4

3 回答 3

1

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

于 2012-10-13T15:49:34.533 回答
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

于 2012-10-13T15:52:47.743 回答
0

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

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

看看这个以帮助理解连接: http: //www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

于 2012-10-13T15:53:04.410 回答