我有3个表:news,users_regions_favorites和users_categories_favorites。每条新闻都有一个区域和一个类别。
我想返回与用户的收藏相关的所有新闻(按照他喜欢的地区或类别)。永远不要两次回复新闻,所以没有UNION。
有没有办法通过加入来做到这一点?
答案 0 :(得分:1)
您确实可以使用UNION
:
SELECT n.id
FROM news n
INNER JOIN users_categories_favorites c
ON c.id = n.catid
WHERE c.uid = 1 -- your user here
UNION
SELECT n.id
FROM news n
INNER JOIN users_regions_favorites r
ON r.id = n.regid
WHERE r.uid = 1; -- your user here
UNION
将进行重复数据删除,仅UNION ALL
赢得
但您也可以仅使用JOIN
s执行此操作:
SELECT DISTINCT n.id
FROM news n
LEFT JOIN users_categories_favorites c
ON c.id = n.catid
LEFT JOIN users_regions_favorites r
ON r.id = n.regid
WHERE c.uid = 1 OR r.uid = 1; -- your user here
答案 1 :(得分:0)
你可以(示意性地):
select distinct
news where exists users_regions_favorites
union
news where exists users_categories_favorites