在一个查询中提取两个多对多

时间:2011-11-03 11:01:27

标签: mysql sql

我有三张桌子:国家,新闻和关系表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

但现在我想提取与所发现的新闻相关的国家。我没有尝试过多次选择,因为我想尽可能避免它。我尝试了join和group_concat,但我无法让它工作。这在一个查询中是否可行?

3 个答案:

答案 0 :(得分: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 :(得分:0)

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

应该为您提供特定新闻的所有国家/地区ID

答案 2 :(得分: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;