返回3个表连接的交集

时间:2015-08-26 13:50:52

标签: mysql sql join

我有3个表:news,users_regions_favorites和users_categories_favorites。每条新闻都有一个区域和一个类别。

我想返回与用户的收藏相关的所有新闻(按照他喜欢的地区或类别)。永远不要两次回复新闻,所以没有UNION。

enter image description here

有没有办法通过加入来做到这一点?

2 个答案:

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