我有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
吗?
谢谢你:))
答案 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;
答案 2 :(得分:0)
内连接仅返回双方的结果。要包含不匹配的结果,您应该使用外部联接。
在您的示例中,如果您从INNER JOIN
更改为LEFT JOIN
,您将看到您期望的行为。
看看这个有助于理解联接:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins