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

Откуда:
Сообщений: 85
Таблицы: Customers(родительская) и Orders(дочерняя).
Можно ли создать Select возвращающий только те записи из Customers, у которых отсутствуют записи в дочерней таблице (Orders), OR(или :-)) тех клиентов, у которых присутствуют записи в Ordres, но хотя бы в одной из них, поле "Факт отправки заказа" имел значение FALSE?

Другими словами: нужно отобрать клиентов у которых нет заказов, либо тех клиентов, у которых заказы есть, но хотя бы один из заказов не отправлен.
24 май 09, 03:05    [7219516]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
Vladimir_V.
Member

Откуда:
Сообщений: 85
Вопрос для знатаков наверно не интересный, да? Но есть же люди добрые, может кто-нибудь поможет новичку, хотя бы подскажете в какую сторону копать?
24 май 09, 16:48    [7220095]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
1. Вы решаете упражнение с сайта http://www.sql-ex.ru/?

2. Опубликуйте, пожалуйста, скрипт создания таблиц (CREATE TABLE).
Чтобы можно было скопипастить его к себе, запустить и получить готовые таблицы.
3. Опубликуйте, пожалуйста, скрипт для заполнения таблиц тестовыми данными.
4. Напишите, пожалуйста, как пытались решить задачу.
24 май 09, 17:56    [7220174]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
lepton
Member

Откуда: Протвино
Сообщений: 1261
Что типа того

Select distinct c.Customer_ID
from Customers c
left join Orders o
on c.Customer_ID = o.Customer_ID
where o.Customer_ID is null
or o.isSent = 1

To Iap
Не sql-ex
24 май 09, 18:05    [7220187]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
lepton
Member

Откуда: Протвино
Сообщений: 1261
Select distinct c.Customer_ID
from Customers c
left join Orders o
on c.Customer_ID = o.Customer_ID
where o.Customer_ID is null
or o.isSent = 0

Опечатался, False = 0
24 май 09, 18:06    [7220189]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
lepton
Что типа того

Select distinct c.Customer_ID
from Customers c
left join Orders o
on c.Customer_ID = o.Customer_ID
where o.Customer_ID is null
or o.isSent = 1

To Iap
Не sql-ex
Но, всё-таки, хотелось бы посмотреть на авторскую попытку решения этой тривиальной задачки.
24 май 09, 18:12    [7220195]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
А вообще, кроме уже предложенного
LEFT JOIN ... ON ... WHERE ... IS NULL
напрашивается
WHERE NOT EXISTS(SELECT * FROM ...)
24 май 09, 18:17    [7220204]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
Vladimir_V.
Member

Откуда:
Сообщений: 85
Огромнейшее СПАСИБО Lepton и IAP за вашу отзывчивость и примеры, ну и конечно за то, что открыли глаза на сайт http://www.sql-ex.ru/?. Обязательно пройду на нем обучение. Дело в том, что я осваиваю ADO.NET и прочитал об этом несколько книг и документацию MSDN. Только вот там о SELECT мало чего сказано, все примеры как правило для простоты содержат, что-то вроде "SELECT * FROM Customers WHERE CustomerID = @CustomerID". Дальше, как раз я намерен был спокойно изучить составление запросов, но возникла срочная необходимость (действительно неотложная) написать небольшую программу. И я откровенно говоря для решения своей задачи собрался обдумывать как программно обработать заполненный DataSet из таблиц Customers и Orders, а потом пришла мысль, что наверно можно составить такой запрос. Еще раз благодарю вас, сообщество SQL.RU не без добрых людей!
24 май 09, 21:08    [7220422]     Ответить | Цитировать Сообщить модератору
 Re: Отбор записей из родительсой таблицы учитывая наличие дочерних записей  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Vladimir_V.
открыли глаза на сайт http://www.sql-ex.ru/?.
Если быть точным, то знак вопроса в конце - это не часть URL, а знак вопроса в моём предложении.
SELECT *
FROM Customers C
WHERE NOT EXISTS
(
 SELECT *
 FROM Ordres O
 WHERE O.CustomersID=C.CustomersID AND O.[Факт отправки заказа]='False'
);
Предположил, что [Факт отправки заказа] - типа BIT.
24 май 09, 21:27    [7220449]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить