Выбор из таблицы, который делает многие ко многим - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующее SQL

SELECT themes.theme_code, themes.name, course_themes.course_code FROM themes LEFT JOIN course_themes ON themes.theme_code=course_themes.theme_code

Он создает таблицу enter image description here

Как вы, наверное, поняли, у меня есть таблица, которая соединяет многие курсы ко многим темам, как вы видите в таблице, тема с theme_code 2 связана с тремя разными курсами (1,2,3), одна тема (3-code) не связана ни с одним курсом.

Является есть способ, без использования массивов в PHP, только в SQL, чтобы выбрать только те темы, которые не связаны с указанным c курсом, например, курс с кодом # 1. Темы не должны содержать повторяющиеся записи, например, если вы выберете все темы, где course_code не равен 1 или null, в этом случае будут отображаться темы, связанные с другими курсами, даже если они уже связаны с нужным мне курсом.

Заранее благодарю

1 Ответ

1 голос
/ 26 мая 2020

На самом деле, существует logi c хорошо работает в этом случае:

SELECT
     t.theme_code,
     t.name
FROM themes t
WHERE NOT EXISTS (SELECT 1 FROM course_themes ct
                  WHERE t.theme_code = ct.theme_code AND ct.course_code = 1);

Если вы хотите использовать подход соединения, вы можете попробовать левое анти-соединение:

SELECT DISTINCT
     t.theme_code,
     t.name
FROM themes t
LEFT JOIN course_themes ct
    ON t.theme_code = ct.theme_code AND ct.course_code = 1
WHERE
    ct.theme_code IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...