mysql - 当 2 个表上不存在匹配记录时,SQL 连接 3 个表

标签 mysql join left-join

我有 3 个表 - domains, keywords, comments

domains 是“主要”表,所有这些表都有公共(public)字段 domain_id。如果它们在其他(keywordscomments)表中没有匹配的记录,我需要编写一个从 domains 表中选择记录的查询。

我编写一个选择匹配记录的查询没有问题,但是如何实现相反的结果呢?看着How to do LEFT JOIN with more than 2 tables?我写了一个查询:

SELECT * FROM domains 
LEFT JOIN keywords ON domains.domain_id=keywords.domain_id WHERE keywords.domain_id IS NULL 
LEFT JOIN comments ON domains.domain_id=comments.domain_id WHERE comments.domain_id IS NULL

部分有效。它选择在 keywords 表中没有匹配项的记录,但忽略 comments 表。所以,根据我找到的其他主题,写了这个:

SELECT * FROM 
(domains LEFT JOIN keywords ON domains.domain_id=keywords.domain_id WHERE keywords.domain_id IS NULL) 
LEFT JOIN comments ON domains.domain_id=comments.domain_id WHERE comments.domain_id IS NULL

这个根本不起作用(语法错误)。如何修改查询以完成工作?我想第一个查询应该差不多没问题了......

最佳答案

where 子句放在 all join 之后,如下所示

如果你想选择 domains 这两个表 keywordscomments 中都不存在,那么使用 OR WHERE 子句中的条件

SELECT * FROM domains 
LEFT JOIN keywords ON domains.domain_id=keywords.domain_id 
LEFT JOIN comments ON domains.domain_id=comments.domain_id 
WHERE keywords.domain_id IS NULL 
OR comments.domain_id IS NULL

如果要选择 domainskeywordscomments 中都不存在的,只需替换 OR WHERE 子句中的条件 AND 如下所示

SELECT * FROM domains 
LEFT JOIN keywords ON domains.domain_id=keywords.domain_id 
LEFT JOIN comments ON domains.domain_id=comments.domain_id 
WHERE keywords.domain_id IS NULL 
AND comments.domain_id IS NULL

关于mysql - 当 2 个表上不存在匹配记录时,SQL 连接 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41611101/

相关文章:

mysql - 根据列值连接可变数量的表

mysql - 左连接或类似查询

mysql - 通过 phPMYadmin 查询 WordPress 的链接文本

php - 用 PHP 显示 MYSQL。想要将选定的行移动到另一个 sql 表并从现有表中删除

MySQL-如何提取给定一周数的星期一?

两个表输出中的 MySQL 查询未正确生成

python - 如何加入 Pyspark 中的多个列?

mysql - 极其简单的 MySQL 查询不起作用

mysql - Conditional INNER JOIN or LEFT JOIN 基于连接条件

php - 查询生成器中的查询关系和分组依据