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 ")

しかし、そのクエリから、2 つのテーブルに同じデータがあるという結果が得られます (例の 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で使用したいものです。これを左側に1つのテーブル、右側に1つのテーブルと考えると、右側にあるかどうかに関係なく、左側からのすべての行が含まれます。それで...

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 JOINに変更LEFT JOINすると、期待する動作が表示されます。

結合を理解するためにこれを見てください: http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

于 2012-10-13T15:53:04.410 に答える