2016-02-05 4 views
2

Я не уверен, как это сделать, поскольку в моих примечаниях к лекции говорят, что я использую «EXCEPT» в SQL, но MYSQL, похоже, не поддерживает это. Я думал, что вместо альтернативы я должен использовать «WHERE NOT IN», но моя проблема в том, что обе эти колонки, которые мне нужно сравнить, имеют разные имена.MySQL - вычитание одного набора запросов из другого

Вот мой неправильный запрос:

(SELECT id FROM projects) WHERE id NOT IN (SELECT project_id FROM projects_viewed); 

Я хочу, чтобы выбрать все строки из таблицы «проектов», где столбец ID не появляется в «projects_viewed» стол. Но столбец называется «project_id» вместо «id», потому что это внешний ключ.

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

ответ

2

Существует несколько способов сделать это. Вот один, используя outer join с null проверки:

select p.id 
from projects p 
    left join projects_viewed pv on p.id = pv.project_id 
where pv.project_id is null 

И еще с not in:

select id 
from projects 
where id not in (select project_id from projects_viewed) 

Я думаю, что эти методы являются более эффективными в mysql чем not exists.

+0

Большое спасибо. Я попытаюсь проверить первый пример, поскольку это кажется многообещающим :) – Mayron

+0

Работал отлично, спасибо! – Mayron

Смежные вопросы