2012-02-12 5 views
0

я не могу получить результат я хочу, позвольте мне объяснить:MySQL присоединиться 3 таблицы трюк

У меня есть две таблицы:

  • КАТЕГОРИИ
  • ПРОЕКТЫ

и между ними другая таблица, которая делает ссылку:

  • ASSIGNED_CAT с 2-мя колонками: PROJECT_ID и CATEGORY_ID

В ASSIGNED_CAT я получаю идентификаторы CATEGORIES и PROJECTS связаны друг с другом.

Теперь мне нужно получить КАТЕГОРИИ, содержащие ПРОЕКТЫ, и если не показывать их.

Пример:
Если КАТЕГОРИЯ 1 есть проекты отображать название категории, а если нет не показывать.

Любая идея обмануть это? Я пробовал много SQL JOIN без успеха. Спасибо!

ответ

1

Я думаю, вам не хватает статьи EXISTS.

В следующем запросе выбираются все категории, для которых по крайней мере одна строка существует в таблице пересечений.

SELECT category_name 
FROM categories c 
WHERE EXISTS (
    SELECT 1 
    FROM assigned_cat ac 
    WHERE ac.category_id = c.category_id 
) 
+0

Что будет «ВЫБРАТЬ 1»? Запрашивая мои знания ... –

+0

@FahimParkar: Он выберет один столбец с постоянным значением '1'. При использовании предложения 'EXISTS' имеет значение только количество строк, поэтому вы также можете« SELECT * »или« SELECT ac.category_id ». –

+0

Спасибо за обмен информации ... :) –