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

Откуда:
Сообщений: 18
Есть две таблицы
Клиенты
- ID
- Фамилия
- Группа
- Телефон

Оплата
- Клиент
- Сумма
- Дата
- Цель

Связь Клиенты.ID с Оплата.Клиенты (один ко многим)

Нужно найти должников.
Выбрать поля Клиенты.Фамилия, Клиенты.Группа, Клиенты.Телефон, Оплата.Сумма, Оплата.Дата, Оплата.Цель

Выбрать все записи из таблицы Клиенты кроме тех у кого в таблице Оплата есть запись между min. датой и max.датой

То есть в итоге хочу получить список всех клиентов, кроме тех кто оплатил в промежутке между мин. датой и макс. датой.

Подскажите пожулуйста как такое сделать.

Пока использую следующий запрос
SELECT Клиент,Фамилия,Имя,Группа,Телефон,Дата,Цель,Сумма
FROM Клиенты left join Оплата on Клиенты.ID=Оплата.Клиент
WHERE NOT EXISTS (
SELECT Клиент,Фамилия,Имя,Группа,Телефон,Дата,Цель,Сумма
FROM Клиенты left join Оплата on Клиенты.ID=Оплата.Клиент 
WHERE Дата between :pMinDate and :pMaxDate
)

Но срабатывает только тогда когда записей меджду макс. датой и мин.датой несуществует вообще.
А нужно что бы показывало всех, кроме тех, которые существуют в промежутке между датами.

Как такое сделать?
10 май 14, 12:42    [15997139]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записи из одной таблици которых нет в другой таблице.  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Vladlenmakiyato
То есть в итоге хочу получить список всех клиентов, кроме тех кто оплатил в промежутке между мин. датой и макс. датой.
SELECT Клиент,Фамилия,Имя,Группа,Телефон
FROM Клиенты 
WHERE NOT EXISTS (
  SELECT *
  FROM Оплата 
  WHERE Оплата.Клиент=Клиенты.ID AND Оплата.Дата between :pMinDate and :pMaxDate
)
10 май 14, 13:02    [15997180]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записи из одной таблици которых нет в другой таблице.  [new]
Vladlenmakiyato
Member

Откуда:
Сообщений: 18
Cygapb-007,
Результат такой же.
Вот пишут
Оператор EXISTS берет подзапрос, как аргумент, и оценивает его как верный, если подзапрос возвращает какие-либо записи и неверный, если тот не делает этого.

Т.е. у меня получается если нет записей в промежутке между дат, то NOT EXISTS возвращает истину. И выводятся все записи из таблицы Клиенты
А если существует хотя бы одна запись в промежутке между дат, то NOT EXISTS возвращает лож. И не выводится не одна запись.

Нужно что то другое вместо NOT EXISTS использовать.
Но я не знаю что.

Кто-нибудь поскажет?
10 май 14, 13:12    [15997213]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записи из одной таблици которых нет в другой таблице.  [new]
Vladlenmakiyato
Member

Откуда:
Сообщений: 18
Вот такой запрос заработал
SELECT Клиент,Фамилия,Имя,Группа,Телефон,Дата,Цель,Сумма
FROM Клиенты left join Оплата on Клиенты.ID=Оплата.Клиент
WHERE Клиенты.ID NOT IN(
select Клиенты.ID
FROM Клиенты left join Оплата on Клиенты.ID=Оплата.Клиент
where Дата between :pMinDate and :pMaxDate
)
10 май 14, 13:49    [15997282]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записи из одной таблици которых нет в другой таблице.  [new]
aleks2
Guest
-- этож бред и издевательство над сервером

SELECT Клиент, Фамилия, Имя, Группа, Телефон, Дата, Цель, Сумма
FROM (select ID from Клиенты
         except
         select Клиент from Оплата where Дата between :pMinDate and :pMaxDate
         ) x
      left outer join
      Клиенты on Клиенты.ID = x.ID
      left join Оплата on Клиенты.ID=Оплата.Клиент
10 май 14, 14:13    [15997305]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записи из одной таблици которых нет в другой таблице.  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Vladlenmakiyato
Т.е. у меня получается если нет записей в промежутке между дат, то NOT EXISTS возвращает истину. И выводятся все записи из таблицы Клиенты
А если существует хотя бы одна запись в промежутке между дат, то NOT EXISTS возвращает лож. И не выводится не одна запись.
Кто-нибудь этот бред пояснить может?
Vladlenmakiyato, срочно читать про коррелированные запросы.
10 май 14, 15:30    [15997385]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записи из одной таблици которых нет в другой таблице.  [new]
Delta7
Member

Откуда:
Сообщений: 2
Vladlenmakiyato, чел помоги пожалуйста разобраться в этом задании
19 май 14, 19:10    [16039053]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать записи из одной таблици которых нет в другой таблице.  [new]
Delta7
Member

Откуда:
Сообщений: 2
Или скинь sql запрос :)
19 май 14, 19:11    [16039058]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить