选择父级是否在mysql中有子级

时间:2016-11-25 05:57:00

标签: mysql left-join right-join

我需要选择所有用户是否有图像如果有,则选择主图像。这对你来说可能很简单但对我来说很难。

我有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”,“有”或“子查询”才能完成。

2 个答案:

答案 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

在这里演示:

SQLFiddle

答案 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 ...

添加聚合