我有一个类似于这样的数据库结构:
asset
+----+---------+
| id | user_id |
+----+---------+
user_favorite
+----------+---------+
| asset_id | user_id |
+----------+---------+
我希望创建一个查询,可以返回属于给定用户的所有资产,并指示它是否为他们的“收藏夹”。
我可以这样做,其中计数()等于零表示它不是收藏夹(但似乎很麻烦和低效):
select distinct(a.asset_id),
(select count(*)
from user_favorite f
where f.user_id = MY USER ID
and f.asset_id = a.asset_id)
from asset a
left join user_favorite u on a.asset_id=u.asset_id
where a.user_id = MY USER ID;
我尝试了以下方法(但在多个用户收藏时,它会从资产中产生多个条目):
select distinct (a.asset_id),
(u.user_id in (MY USER ID))
from asset a
left join user_favorite u on a.asset_id=u.asset_id
where a.user_id = MY USER ID;
我也尝试了这个(但IN条件没有被满足):
select distinct(a.asset_id),
(u.user_id in (MY USER ID))
from asset a
left join user_favorite u on a.asset_id=u.asset_id
where a.user_id = MY USER ID group by u.user_id;
有没有一种好的方法来执行这个查询?
Asset
表实际上是一个UserAsset
表吗?否则,为什么要选择DISTINCT,除非标记为“id”的列实际上不是ID。 - OGHaza