我需要选择所有用户是否有图像如果有,则选择主图像。这对你来说可能很简单但对我来说很难。
我有2个表用户,图像
Users Table
Id | name |
1 xyz
2 abc
3 qwe
4 rty
Images Table
Id | user_id | image_path | is_primary
1 1 path 0
2 1 path 1
3 2 path 1
4 4 path 0
**Result I'm expecting**
name | image_path | is_primary
xyz | path | 1
abc | path | 1
qwe | null | 0 (this user has no image in images table)
rty | path | 0
我不知道怎么做。它看起来很复杂,因为我知道只有“AND”,“有”或“子查询”才能完成。
答案 0 :(得分:0)
右下方LEFT JOIN
的子查询将Images
表限制为仅为每个用户具有最大is_primary
值的记录。当用户没有主要内容时,is_primary
的最大值为零,而当他确实有主要内容时,最大值为1.
SELECT t1.name,
t2.image_path,
COALESCE(t2.is_primary, 0) AS is_primary
FROM Users t1
LEFT JOIN
(
SELECT t1.user_id,
t1.image_path,
t1.is_primary
FROM Images t1
INNER JOIN
(
SELECT user_id, MAX(is_primary) AS is_primary
FROM Images
GROUP BY user_id
) t2
ON t1.user_id = t2.user_id AND
t1.is_primary = t2.is_primary
) t2
ON t1.Id = t2.user_id
在这里演示:
答案 1 :(得分:0)
试试这个:
SELECT
users.name, Images.image_path, IF(MAX(Images.is_primary)=1, 1, 0)
FROM
users
LEFT JOIN
Images
ON
Images.user_id = users.Id
GROUP BY
users.Id
让我们使用MAX ...
添加聚合