mysql - Mysql查询:选择先加入或默认
问题描述
我有 2 张桌子。Persons
和Images
。
一个人可能有许多图像。
我想用他的主图像BUT(!)选择一个人,如果标记为的图像都没有isPrimary=1
带第一个图像。只能有一张或更少的图片isPrimary=1
SELECT
*,
(
SELECT id
FROM Image
WHERES personId=r.id AND isPrimary=1
LIMIT 1
) AS primaryImageId
FROM Persons r
ORDER BY id DESC;
我用子选择做到了,加入也很好......谢谢
解决方案
您可以使用:
SELECT r.*,
(SELECT i.id
FROM Image i
WHERES i.personId = r.id
ORDER BY i.isPrimary DESC, i.id ASC
LIMIT 1
) AS primaryImageId
FROM Persons r
ORDER BY id DESC;
这会对图像进行排序,首先是主图像 - 然后拍摄第一张图像。
您应该学习限定所有列引用——这在使用相关子查询时尤其重要。我假设别名在您的母语中r
是有意义的。persons
否则,请使用合理的东西,例如p
.
推荐阅读
- jenkins - 在 ansible playbook 运行后,热抑制来自 jenkins 管道的 BadExitStatusException 错误
- spring-boot - Wildfly 14上的战争部署中的Spring Boot 2 application.properties
- php - 从带有子元素的php数组动态创建菜单列表
- html - 如何在轮播中每页显示三个元素?
- ios - 从 NSObject 类派生的安全类,用于 iOS Swift 中的 JSON 解析
- outlook-addin - 如何使用 OneDrive for Business 中的 addFileAttachmentAsync 添加文件
- c# - 在 C# 中通过 tcp/ip 连接发送图像
- php - 将自定义 WooCommerce 结帐字段导出到 ShipStation 自定义字段 2
- prestashop-1.7 - 如何将文本添加到微型列表块
- database - 单属性主键和第二范式(2NF)