mysql - 使用 LEFT OUTER JOIN 检查相关行不存在的最佳方法是什么

标签 mysql sql join outer-join

使用 MySQL 5.x 我想高效从表 X 中选择所有行,其中表 Y 中没有相关行满足某些条件,例如

给我 X 中不存在与 foo = bar 相关的 Y 的所有记录

SELECT count(id) FROM X
LEFT OUTER JOIN Y ON y.X_id = X.id AND y.foo = 'bar'
WHERE y....?

据我了解,左外连接保证为左(第一个)表中的每一行生成一行——在本例中为 X——无论是否在连接表中找到令人满意的行。然后我想做的是只选择那些没有找到行的行。

在我看来,如果没有匹配的记录,y.X_id应该是NULL,但是这个测试似乎不起作用。 y.X_id = 0 或 !y.X_id 也不是。

编辑:更正了几个回复指出的转录错误(ON not AS)。修复了语法错误。

最佳答案

SELECT count(id) FROM X 
LEFT OUTER JOIN Y ON (y.X_id = X.id AND y.foo = 'bar')
WHERE y.X_id is null

你很接近。

首先正常进行连接,然后选择 Y 中的 not null 行实际上是 null 的所有行,因此您确定存在“不匹配” "而不仅仅是 Y 中的 null 值。

另请注意您在查询中输入的错误(已更正):

LEFT OUTER JOIN Y AS
-- should be
LEFT OUTER JOIN Y ON
-- This however is allowed
LEFT OUTER JOIN table2 as Y ON ....

关于mysql - 使用 LEFT OUTER JOIN 检查相关行不存在的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886095/

相关文章:

PHP 和 SQL 问题

sql - DISTINCT 仅适用于一列

c# - Linq 加入表中的最后一个实例

mysql - SQL根据where row id将内容从一个表移动到另一个表

mysql - 基于选择与分组依据相同的表进行更新

php - 如何在 php 中设置 Symfony 2 从数据库配置

r - 合法连接上的 data.table 笛卡尔连接警告

php - 使用 mysqli_query 读取 php 中的列不起作用

mysql - SQL 给定时间给定节点的求和值

join - 基于另一个没有显式连接列的 Spark df 计算 Spark df 中的新列