Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужна помощь запросом - объединение таблиц  [new]
Manonia
Member

Откуда: Иркутск
Сообщений: 112
Доброго времени суток,
нужна помощь по запросу. Есть две таблицы - в первой хранятся все ссылки, во второй удалённые ссылки. Например в первой хранятся 10 ссылок, во второй пять, значит всего неудалённых ссылок 5. Каким запросом можно вывести неудалённые ссылки?
30 май 11, 06:49    [10729143]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
not exists
30 май 11, 07:35    [10729163]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
except
left join ... where ... is null
30 май 11, 09:09    [10729308]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
Manonia
Member

Откуда: Иркутск
Сообщений: 112
Спасибо, я не уточнила, что у меня посложней структура. т.е. хранятся не просто id ссылки, но и id юзера, ссылка, описание, комната, где опубликована эта ссылка и т.д.(это первая таблица). Во вторую, если ссылка удаляется я пишу id ссылки, id юзера и id комнаты... с такой тсруктурой как я понимаю не подойдет except?
30 май 11, 09:27    [10729348]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Manonia
с такой тсруктурой как я понимаю не подойдет except?
Подойдёт. В EXISTS()
30 май 11, 09:31    [10729375]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Или даже
WHERE NOT EXISTS(SELECT ... INTERSECT SELECT ...)
30 май 11, 09:32    [10729380]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
Manonia
Member

Откуда: Иркутск
Сообщений: 112
iap, спасибо, работает! =))
30 май 11, 13:03    [10731112]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Manonia
iap, спасибо, работает! =))
Покажите запрос
30 май 11, 13:16    [10731216]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
Manonia
Member

Откуда: Иркутск
Сообщений: 112
iap, запрос был такой:
SELECT u.user_id, u.user_nick,
d.user_share_data_id, d.user_id,
d.room_id, d.url
FROM data d
JOIN rooms u
ON d.user_id = u.user_id AND d.room_id = u.room_id
WHERE d.room_id = @roomID
AND NOT EXISTS(SELECT d.user_id, d.room_id, d.user_share_data_id
INTERSECT SELECT l.user_id, l.room_id, l.user_share_data_id
FROM user_deleted_links l)
ORDER BY u.user_id.

Но оказалось это не совсем корректно. В одной таблице хранятся ссылки пользователей(id_user, id_link, room_id) - т.е. соответсвенно какой пользователь какую ссылку в какой комнате опубликовал. Во второй я храню какой пользователь в какой комнате какую ссылку удалил (извиняйте за мой лексикон=)). Так вот сейчас с данным запросом если хоть один пользователь удалил ссылку, она не выводится всем, а мне нужно, чтобы не выводилаьс только тому пользователю, который её удалил ...
31 май 11, 05:25    [10736066]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Manonia,

а откуда известно, для какого пользователя выполняется данный запрос?
Ну, чтобы знать, кому "выводить", а кому - нет.
31 май 11, 10:20    [10736687]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Manonia
iap, запрос был такой:
SELECT u.user_id, u.user_nick,
d.user_share_data_id, d.user_id,
d.room_id, d.url
FROM data d
JOIN rooms u
ON d.user_id = u.user_id AND d.room_id = u.room_id
WHERE d.room_id = @roomID
AND NOT EXISTS(SELECT d.user_id, d.room_id, d.user_share_data_id
INTERSECT SELECT l.user_id, l.room_id, l.user_share_data_id
FROM user_deleted_links l)
ORDER BY u.user_id.

Но оказалось это не совсем корректно. В одной таблице хранятся ссылки пользователей(id_user, id_link, room_id) - т.е. соответсвенно какой пользователь какую ссылку в какой комнате опубликовал. Во второй я храню какой пользователь в какой комнате какую ссылку удалил (извиняйте за мой лексикон=)). Так вот сейчас с данным запросом если хоть один пользователь удалил ссылку, она не выводится всем, а мне нужно, чтобы не выводилаьс только тому пользователю, который её удалил ...
Может я чего не допонял, но по синтаксису запроса...
Если у Вас имеется
WHERE d.room_id = @roomID
то зачем ?
AND d.room_id = u.room_id
31 май 11, 10:24    [10736722]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
Manonia
Member

Откуда: Иркутск
Сообщений: 112
iap, запрос выполняется хранимой процедурой, могу передавать userID(помимо roomID).

Владимир СА, видимо не нужно AND, спасибо =)
31 май 11, 11:26    [10737180]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
Manonia
Member

Откуда: Иркутск
Сообщений: 112
iap, или вы имели в виду, где это в запросе? Пока нигде, суть вопроса в этом и заключается - как выбрать для пользователя ссылки, за исключением которые он удалил ...
31 май 11, 11:30    [10737226]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
Manonia
Member

Откуда: Иркутск
Сообщений: 112
эге-гей ...
1 июн 11, 06:33    [10742634]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь запросом - объединение таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
SELECT u.user_id, u.user_nick,
d.user_share_data_id, d.user_id,
d.room_id, d.url 
FROM data d
JOIN rooms u
ON d.user_id = u.user_id AND d.room_id = u.room_id
WHERE d.room_id = @roomID
AND NOT EXISTS(SELECT d.user_id, d.room_id, d.user_share_data_id 
INTERSECT SELECT l.user_id, l.room_id, l.user_share_data_id 
FROM user_deleted_links l
WHERE l.user_id=@user_id)
ORDER BY u.user_id;
??
1 июн 11, 11:33    [10743852]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить