如果数据透视表中有多个匹配项,则返回结果的SQL

时间:2016-06-20 20:48:19

标签: mysql sql

channel_data table
-------------
entry_id
content

channel_title table
-------------
entry_id
title

category_posts table
-------------
entry_id
category_id

category_posts的样本数据

entry_id  cat_id
2         10
2         11
2         30
2         40
3         10
3         11

我需要能够查询数据,以便我可以说返回具有多个类别的数据。我尝试了几种不同的方法,但到目前为止无法解决这个问题。我确信这很简单,所以希望有人可以提供帮助。

这是我得到的地方,但无法弄清楚在where子句中我需要什么才能使它工作。如果我只需要一个类别它可以工作但是有2个它没有。

SELECT distinct a.entry_id, b.title
FROM exp_channel_data as a 
LEFT JOIN exp_channel_titles as b
ON a.entry_id = b.entry_id
LEFT JOIN exp_category_posts as c
ON a.entry_id = c.entry_id
WHERE c.cat_id = 10 and c.cat_id = 30   

1 个答案:

答案 0 :(得分:0)

您可以使用以下查询,以使entry_id值与 cat_id值相关联:

SELECT entry_id
FROM category_posts
WHERE cat_id IN (10, 30)
GROUP BY entry_id
HAVING COUNT(DISTINCT cat_id) = 2

现在,您可以将上述查询用作派生表,并使用JOIN来获取预期结果:

SELECT distinct a.entry_id, b.title
FROM exp_channel_data as a 
LEFT JOIN exp_channel_titles as b ON a.entry_id = b.entry_id
LEFT JOIN (
   ... above query here
) AS c ON a.entry_id = c.entry_id