特定的Mysql Select查询需要帮助

时间:2018-08-01 10:57:08

标签: mysql sql

我有两个表resource (id, name, ...)user_favorites(user_id, resource_id),它们具有来自资源表的外键resource_id

我有一种情况需要检查资源表中user_favorites表中特定的user_id是否有任何记录到user_favorites表中,并相应地设置一个标志true或false。

这是我可以提出的最后一个查询

SELECT distinct resources.*,
       (CASE WHEN user_favorites.user_id='1' then 'TRUE' ELSE 'FALSE' END) as favorite,
       user_favorites.user_id
FROM resources LEFT JOIN
     user_favorites
     ON resources.id = user_favorites.resource_id

但是,我希望能够保留这些资源。对于当前查询,当还存在其他用户ID的记录时,它将记录为false。

解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以在select中使用表达式逻辑。在MySQL中,您甚至不需要case

SELECT r.*, 1 as user_id,
       (EXISTS (SELECT 1
                FROM user_favorites uf
                WHERE r.id = ur.resource_id AND
                      ur.user_id = 1
               )
       ) as flag
FROM resources r ;

答案 1 :(得分:0)

使用此

SELECT 
r.*
, IFNULL(ur.totalUser, 0) AS totalUser
FROM `resource` r
LEFT JOIN 
(
    SELECT 
    resource_id
    , COUNT(user_id) AS totalUser
    FROM `user_favourites` 
    GROUP BY resource_id
) AS ur ON ur.resource_id = r.`id`