0

これらは 2 つの非常によく似たクエリです。それらの違いは、2 番目のクエリで ng2s3_map という名前の新しいテーブルを追加し、そこから 1 つの列だけが必要なことです。問題は、最初のクエリが必要に応じて常に機能するが、lik 列を出力せず、2 番目のクエリがテーブル ng2s3_map に行がある場合にのみ機能し、それ以外の場合は何も出力しないことです。2 番目のクエリを変更して、ng2s3_map テーブルに行があるかどうかに関係なく結果を出力する方法。(2 つのテーブルを追加した唯一の理由は、問題をよりよく説明するためです)。

最初のクエリ:

SELECT ng2s3_content.ID, ng2s3_similar.similar_ID, ng2s3_similar.up, ng2s3_similar.down, similar_articles.Title AS SimilarTitle, similar_articles.image AS image
FROM ng2s3_content
JOIN ng2s3_similar ON ng2s3_content.ID = ng2s3_similar.ID
JOIN ng2s3_content similar_articles ON ng2s3_similar.Similar_ID = similar_articles.ID
WHERE ng2s3_content.ID =4764

2 番目のクエリ:

SELECT ng2s3_content.ID, ng2s3_similar.similar_ID, ng2s3_similar.up, ng2s3_similar.down, ng2s3_map.similar_id, ng2s3_map.vote_id, ng2s3_map.lik, similar_articles.Title AS SimilarTitle, similar_articles.image AS image
FROM ng2s3_content
JOIN ng2s3_similar ON ng2s3_content.ID = ng2s3_similar.ID
JOIN ng2s3_content similar_articles ON ng2s3_similar.Similar_ID = similar_articles.ID
JOIN ng2s3_map ON ng2s3_map.similar_id = ng2s3_similar.similar_ID
AND ng2s3_map.vote_id = ng2s3_content.ID
WHERE ng2s3_content.ID =4764
4

1 に答える 1

1

その場合は、LEFT JOIN代わりに使用する必要がありますINNER JOIN

SELECT  ng2s3_content.ID, 
        ng2s3_similar.similar_ID, 
        ng2s3_similar.up, 
        ng2s3_similar.down, 
        ng2s3_map.similar_id, 
        ng2s3_map.vote_id, 
        ng2s3_map.lik, 
        similar_articles.Title AS SimilarTitle, 
        similar_articles.image AS image
FROM    ng2s3_content
        INNER JOIN ng2s3_similar 
            ON ng2s3_content.ID = ng2s3_similar.ID
        INNER JOIN ng2s3_content similar_articles 
            ON ng2s3_similar.Similar_ID = similar_articles.ID
        LEFT JOIN ng2s3_map 
            ON  ng2s3_map.similar_id = ng2s3_similar.similar_ID AND 
                ng2s3_map.vote_id = ng2s3_content.ID
WHERE   ng2s3_content.ID = 4764

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-03-18T08:07:23.903 に答える