mysql - LEFT JOIN 包含不存在的记录

标签 mysql

我有两个表:

属性 property_id、col1、col2 ...

图片 image_id、property_id、serial、...

图像表中的序列号仅为 1,2,3,4...(最多为属性拥有的图像数量)。 Serial=1 表示默认图像。

我想仅使用默认图像来获取所有属性。所以我这样做:

SELECT * FROM properties p 
LEFT JOIN images i ON p.property_id = i.property_id 
WHERE i.serial=1

效果非常好。但我注意到许多特性根本没有图像。所以它们不会出现在结果中。我还想选择所有那些根本没有任何图像的属性。我怎样才能做到这一点?

编辑: 我可以做类似的事情吗 WHERE (i.serial = 1 OR count(i.serial)=0)

最佳答案

如果使用外联接并对联接表设置条件,则必须在联接条件中包含此条件。

SELECT 
    * 
FROM 
    properties p 
LEFT JOIN 
    images i 
ON 
    p.property_id = i.property_id 
AND 
    i.serial=1

如果在 WHERE 子句中使用此条件,则会将 OUTER 联接隐式更改为 INNER 联接。

关于mysql - LEFT JOIN 包含不存在的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844259/

相关文章:

php - 制作动态下拉导航系统

mysql - inner join 按客户显示销售列表

php - mysql_fetch_array() 有一个奇怪的问题

php - 使用 PHP 在 Objective-C 应用程序和 MySQL 之间进行安全通信

MYSQL 加速查询

MySQL自增从4开始

php - 通过函数与对象访问数据库,区别是什么?

mysqldump - 如果不存在则创建表

mysql - 大型引用表的 mysql 替代品

php - 删除表情符号/unicode 字符