2013-03-13 2 views
0

У меня есть запрос:Пустой стол с помощью NOT EXISTS

SELECT g.name, s.hour, gs.weekday 
FROM schedule s 
INNER JOIN group_schedule gs ON gs.schedule_id = s.id 
INNER JOIN groups g ON g.id = gs.group_id 
WHERE EXISTS (
    SELECT * 
    FROM group_schedule 
    WHERE group_id =6 
) 
ORDER BY g.name, gs.weekday 

, возвращающих:

name hour  weekday 
A1-A2 10:00:00 1 
A1-A2 17:00:00 1 
A1-A2 10:30:00 1 
A1-A2 17:30:00 1 
A1-A2 18:00:00 2 
A1-A2 11:30:00 2 
A1-A2 18:30:00 2 
A1-A2 11:00:00 2 
A1-A2 12:30:00 3 

Но мне нужно тоже, чтобы получить строки, которые не имеют этих комбинаций, например:

name hour  weekday 
A1-A2 10:30:00 1 
A1-A2 11:00:00 1 
A1-A2 11:30:00 1 
... 

Если я использую NOT EXISTS, я получаю пустой стол.

+3

Является ли это только мной или является единственным предложением where в вашем первоначальном запросе group_id = 6, и я не знаю, что означает «не иметь этих комбинаций»? –

+0

Итак, вы планируете, что не принадлежат к группе 6? –

+0

Предложение 'exist' не имеет большого смысла. Вероятно, вам лучше, если вы [отредактируете] свой вопрос, чтобы предоставить некоторые образцы данных и ваш желаемый результат. (См. [How to формат SQL-таблиц в переполнении стека post?] (Http://meta.stackexchange.com/q/96125) для добавления некоторых.) –

ответ

0

я не знаю, но вы имеете в виду что-то вроде:

SELECT g.name, s.hour, gs.weekday 
FROM schedule s 
INNER JOIN group_schedule gs 
ON gs.schedule_id = s.id AND group_id = 6 
INNER JOIN groups g ON g.id = gs.group_id 
ORDER BY g.name, gs.weekday 

Перемещение условие GROUP_ID из общего ИНЕКЕ и в group_schedule JOIN? Вы знаете, что может иметь произвольное логическое выражение после ключевого слова ON.

+0

его, вероятно, 'group_id <> 6', но затем обычно люди пишут 'Where gs.group_id <> 6' –

+0

Большое спасибо! Finnaly, мне пришлось покинуть условие group_id, так как ciritcalfix означает и использовать оператор <>, как сказал Конрад Фрикс. 'ВЫБОР s.id, s.hour, gs.weekday из Списка сек INNER JOIN group_schedule Г.Ш. О gs.schedule_id = s.id И group_id <> 6 внутреннее соединение группы г ВКЛ g.id = gs.group_id ГДЕ СУЩЕСТВУЕТ ( SELECT * ОТ group_schedule ) ORDER BY gs.weekday, s.hour LIMIT 0, 30' – AntonioRomero