首页 > 解决方案 > Mysql查询:选择先加入或默认

问题描述

我有 2 张桌子。PersonsImages

一个人可能有许多图像。
我想用他的主图像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;

我用子选择做到了,加入也很好......谢谢

标签: mysqlsql

解决方案


您可以使用:

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.


推荐阅读