[SQL] помогите с запросом.
select id from dvd t
where t.id not in (select id_dvd from takenitems)
where t.id not in (select id_dvd from takenitems)
вложенных SELECT'ов нет
я написал об этом
я написал об этом
сорри, не заметил
select d.id
from dvd d
left join taken t on d.id=t.id_dvd
where t.id_dvd is null
from dvd d
left join taken t on d.id=t.id_dvd
where t.id_dvd is null
или щас выяснится, что левых джойнов тоже нет? 

Что-то мне подсказывает, что не может быть так, что получить все элементы, удовлетворяющие условию, за один простой селект --- можно, а не удовлетворяющие --- нельзя.
Уже есть пара вариантов, но они достаточно кривые (хотя, вполне возможно, их и выйдет довести до чего-то путного).
---
...Я работаю...
Уже есть пара вариантов, но они достаточно кривые (хотя, вполне возможно, их и выйдет довести до чего-то путного).
---
...Я работаю...
проверь 

Join'ы есть 
когда я задавал вопрос я придумал ответ
то есть он такой же, как у тебя, но с outer join'ом
что-то мне подсказало, что он будет вернее
а теперь они обадают один и тот же результат
в чем тогда их разница:? и что в данном случае правильнее?
спасибо

когда я задавал вопрос я придумал ответ
select
a.*
from DVD a
left outer join TakenItem b on a.id = b.id_dvd
where b.id_dvd is null;
то есть он такой же, как у тебя, но с outer join'ом
что-то мне подсказало, что он будет вернее
а теперь они обадают один и тот же результат
в чем тогда их разница:? и что в данном случае правильнее?
спасибо

outer в данном случае ровно ничего не значит - это просто повышение читабельности.
существуюет всего 4 типа джойнов (на самом деле три, потому что правый есть зеркальное отражение левого)
"join" == "inner join"
"outer join" == "full join"
"left join" == "left outer join"
"right join" == "right outer join"
существуюет всего 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 

спасибо )
outer в данном случае ровно ничего не значит - это просто повышение читабельности.Бывает еще и cross join
существуюет всего 4 типа джойнов (на самом деле три, потому что правый есть зеркальное отражение левого)
"join" == "inner join"
"outer join" == "full join"
"left join" == "left outer join"
"right join" == "right outer join"
а бывает еще и natural join
см. http://lomeo.livejournal.com/1571.html
см. http://lomeo.livejournal.com/1571.html
Хм. Что-то имхо многовато джойнов набралоь. Аж 6 =)
Я знаю:
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 - не настоящий какой-то
Я что-то упустил?
Я знаю:
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 есть "...a very useful syntax enhancement because it removes the need to add a WHERE clause for the table join conditions, and make all entries in the WHERE clause only used for result set filtering."
ничего нового оно не вносит, так что джойнов всего три, а все оставльное - вариации на тему.
ничего нового оно не вносит, так что джойнов всего три, а все оставльное - вариации на тему.
NATURAL JOINда только это ANSI 99. А вот МсСкл 2000 его похоже не поддерживает
Ты это к чему сказал? =)
Оставить комментарий
noiz_music
Всем привет.Подскажите, как составить следующий запрос, учитывая то, что вложенных SELECT'ов нет.
Есть две таблицы:
Первая таблица сожержит DVD диски DVD-проката, вторая содержит какие диски какими пользователями взяты.
Как составить запрос, чтобы узнать свободные диски, не взятые не одним пользователем? Или по-другому, как вытащить все id из таблицы DVD, которые не содержатся в TakenItems?
Спасибо.