Извлечь два "многие ко многим" в одном запросе - PullRequest
2 голосов
/ 03 ноября 2011

У меня есть три таблицы: страна, новости и таблица отношений 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, но не смог заставить его работать. Возможно ли это в одном запросе?

Ответы [ 3 ]

3 голосов
/ 03 ноября 2011

Попробуйте это -

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
0 голосов
/ 03 ноября 2011

Вы должны просто выбрать столбцы для конкретной страны.

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 голосов
/ 03 ноября 2011
Select country.id from country c right Join  
country_news cn on c.id=cn.country_id 
where  cn.news_id = @newsid

должен дать вам все идентификаторы страны для определенного новостного идентификатора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...