mysql - 三张 table 相连。即使一张表为空也显示查询结果

标签 mysql sql join

这是两个非常相似的查询。它们之间的区别在于,在第二个查询中,我添加了名为 ng2s3_map 的新表,并且我只需要其中的一列。问题是第一个查询始终根据需要工作,但不输出类似列,第二个查询仅当表 ng2s3_map 中有行时才工作,否则不输出任何内容。如何更改第二个查询,以便无论 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

第二个查询:

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

最佳答案

如果是这种情况,那么您需要使用 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

要进一步了解有关联接的更多知识,请访问以下链接:

关于mysql - 三张 table 相连。即使一张表为空也显示查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15472145/

相关文章:

php - 如何将 MySQLi 连接器转换为 PHP PDO

用于将列合并为一个的 MySQL 语法查询

sql - 当所有重叠的日期范围同时重叠时获取所有重叠的日期范围

c# - 如何将表(DataTable)保存到数据库中的单个单元格中?

mysql - mySQL 中两个表的内连接

php - 按 id 选择第三个表

mysql - 在查询中从子表获取串联行的更好方法是什么?

mysql - mysql 表中具有最大值的 activerecord ruby​​ 行

sql - 如何随机化 DISTINCT ON 结果的顺序?

python - mysqldb 中的转义值