2013-03-18 33 views
0

這是2個非常相似的查詢。它們之間的區別在於,在第二個查詢中,我添加了一個名爲ng2s3_map的新表,並且我只需要從那裏獲得1列。問題在於第一個查詢隨時需要,但不輸出lik列,第二個查詢只在表ng2s3_map中有行時才起作用,否則它不輸出任何內容。如何更改第二個查詢,因此無論ng2s3_map表中是否存在行,它都會輸出結果。 (我添加2個表格的唯一原因是爲了更好地解釋我的問題)。3表加入。即使1個表爲空也顯示查詢結果

第一個查詢:

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 

第二個查詢:

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 

回答

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 

爲了進一步獲得更多的知識關於加入,請訪問下面的鏈接:

相關問題