MySQL объединение трех таблиц - PullRequest
0 голосов
/ 24 октября 2011

У меня есть несколько таблиц, которые имеют отношения типа «имеет и принадлежит многим» с использованием таблиц соединения.Основными таблицами являются страны, программы и списки.Базовая структура:

countries
  -id
  -name

programs
  -id
  -name

listings
  -id
  -title

countries_programs
  -country_id
  -program_id

listings_programs
  -listing_id
  -program_id

listings_countries
  -listing_id
  -country_id

Я делал следующее, чтобы перечислить программы для страны, когда им присвоено значение идентификатора страны (в нашем случае 5):Мне нужно только вернуть программы для страны, только если программы для конкретной страны действительно имеют какие-либо списки, которые также находятся в этой стране.Таким образом, он должен возвращать только тот случай, когда программы находятся в указанной стране и имеют списки, которые есть в этой программе, а также в этой стране.

Если программа для указанной страны не имеет списков, то я не хочу, чтобы она возвращалась.Я пробовал разные комбинации, но не могу заставить это работать.Кто-нибудь видит, как это можно сделать?

Я думаю, мне нужно присоединиться к таблице списков, но ничего из того, что я пробовал, не приблизилось.

1 Ответ

1 голос
/ 24 октября 2011

Чтобы не возвращать повторяющиеся данные, я бы использовал предложение EXISTS. Кроме того, переключитесь на INNER соединения, чтобы удовлетворить требования страны.

SELECT p.* 
FROM programs p
INNER JOIN countries_programs cp
    ON p.id = cp.program_id 
WHERE cp.country_id = 5
AND EXISTS (
    SELECT 1 FROM listings_countries lc
    INNER JOIN listings_programs lp
        ON lc.listing_id = lp.listing_id
    WHERE lc.country_id = c.id
    AND lp.program_id = p.id
)

Я пропустил соединение с countries, поскольку вы имеете дело только с идентификатором страны, который доступен в countries_programs.

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