2013-03-18 29 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 

为了进一步获得更多的知识关于加入,请访问下面的链接:

相关问题