2011-11-03 82 views
2

我有三个表:国家,新闻和关系表country_news。一个国家有许多新闻,新闻可以来自许多国家。我想从一个国家做一个仰望提取所有相关的新闻,这是很容易:提取两个多对多的查询

SELECT news.* FROM country, news, country_news 
WHERE country.id = 1 
    AND country_news.country_id = country.id 
    AND country_news.news_id = news.id 

但现在我想提取与发现的新闻以及相关的国家。我还没有尝试过多次选择,因为我希望尽可能避免它。我尝试了连接和group_concat,但我无法使它工作。这可能在一个查询中吗?

+0

为什么向下票呢?我不认为答案是非常简单的,因此这是一个很好的问题。 – GijsjanB

+1

Upvoted补偿,我不认为这是一个'downvote没有给出一个原因'的问题。 – Johan

回答

3

尝试这一个 -

SELECT n.*, c2.* FROM country c 
    JOIN country_news cn 
    ON cn.country_id = c.id 
    JOIN news n 
    ON cn.news_id = n.id 
    LEFT JOIN country_news cn2 
    ON cn2.news_id = n.id 
    LEFT JOIN country c2 
    ON cn2.country_id = c2.id 
WHERE c.id = 1 
+1

+1假设用户希望所有关联的国家都有关于国家1的新闻报道,这看起来是唯一可行的答案(尽管'LEFT JOIN country f2'应该是'LEFT JOIN country c2')。 –

+0

@Mark Ba​​nnister感谢您的留言。我编辑了答案。 – Devart

+0

非常感谢,这个作品像一个魅力!我不认为我会很快找到这个查询。 – GijsjanB

0
Select country.id from country c right Join 
country_news cn on c.id=cn.country_id 
where cn.news_id = @newsid 

应该给你所有国家IDS特定NewSID的

+0

这就像你说的那样工作(如果你把country.id改为c.id),但我想从一个国家进行查询,导致所有相关国家的所有新闻。 – GijsjanB

0

你应该选择国家特定的列也是如此。

SELECT country.name as country_name, news.* FROM country, news, country_news WHERE country.id = 1 AND country_news.country_id = country.id AND country_news.news_id = news.id; 
+0

这不起作用。新闻摘录正确,但相关国家却没有。 – GijsjanB