[SQL] помогите с запросом.
where t.id not in (select id_dvd from takenitems)
я написал об этом
сорри, не заметил
from dvd d
left join taken t on d.id=t.id_dvd
where t.id_dvd is null
![](/images/graemlins/grin.gif)
Уже есть пара вариантов, но они достаточно кривые (хотя, вполне возможно, их и выйдет довести до чего-то путного).
---
...Я работаю...
![](/images/graemlins/wink.gif)
![](/images/graemlins/smile.gif)
когда я задавал вопрос я придумал ответ
select
a.*
from DVD a
left outer join TakenItem b on a.id = b.id_dvd
where b.id_dvd is null;
то есть он такой же, как у тебя, но с outer join'ом
что-то мне подсказало, что он будет вернее
а теперь они обадают один и тот же результат
в чем тогда их разница:? и что в данном случае правильнее?
спасибо
![](/images/graemlins/smile.gif)
существуюет всего 4 типа джойнов (на самом деле три, потому что правый есть зеркальное отражение левого)
"join" == "inner join"
"outer join" == "full join"
"left join" == "left outer join"
"right join" == "right outer join"
left join и left outer join - это одно и то же. Слово "внешний" можно опускать.
я так и подумал
спасибо
www.sql-ex.ru, очень правильный сайт по изучению SELECT ![](/images/graemlins/smile.gif)
На всякий случай, ![](/images/graemlins/smile.gif)
спасибо )
outer в данном случае ровно ничего не значит - это просто повышение читабельности.Бывает еще и cross join
существуюет всего 4 типа джойнов (на самом деле три, потому что правый есть зеркальное отражение левого)
"join" == "inner join"
"outer join" == "full join"
"left join" == "left outer join"
"right join" == "right outer join"
Я знаю:
1. cross join aka inner join aka straight join aka join aka , - классическое произведение двух таблиц, каждой строке первой табл. ставится в соответсвие каждая строка второй (в нек. диалектах SQL могут отличаться возможностью/обязательностью наличия условного ON clause)
2. left join aka left outer join - когда всем строкам левой таблицы ставятся в соответствие строки правой, соответствующие условию ИЛИ NULL, если таких строк нет
3. right join aka right outer join - то же, что и п.2 тока меняем слова левый и правый местами
4. natural ... - любой (в нек. диалектах только первый) из вышеперечисленных джойнов, в котором автоматически выставляется условие равенства всех одинаково названных столбцов в обеих таблицах
Итого максимум 4. И то, имхо 4 - не настоящий какой-то
Я что-то упустил?
ничего нового оно не вносит, так что джойнов всего три, а все оставльное - вариации на тему.
NATURAL JOINда только это ANSI 99. А вот МсСкл 2000 его похоже не поддерживает
Ты это к чему сказал? =)
Оставить комментарий
noiz_music
Всем привет.Подскажите, как составить следующий запрос, учитывая то, что вложенных SELECT'ов нет.
Есть две таблицы:
Первая таблица сожержит DVD диски DVD-проката, вторая содержит какие диски какими пользователями взяты.
Как составить запрос, чтобы узнать свободные диски, не взятые не одним пользователем? Или по-другому, как вытащить все id из таблицы DVD, которые не содержатся в TakenItems?
Спасибо.