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

Откуда:
Сообщений: 77
нужно сделать запрос с использованием оператора JOIN.запрос - список покупателей,ничего не заказывавших.я не знаю как сделать.сделал запрос чтобы он выводил данные о клиенте с определенным номером заказа.а как сделать тех что не заказывали не знаю..подскажите пожалуйста.=)
SELECT c.FName,c.LName
FROM Customer c
JOIN [Order] o ON o.IdCust=c.IdCust
JOIN OrdItem oi ON oi.IdOrd=o.IdOrd
AND o.IdOrd=4
по этим вот таблицам:

К сообщению приложен файл. Размер - 49Kb
25 сен 12, 23:08    [13221943]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
я не знаю как сделать


М.б. ну его на фиг, эти запросы, и заняться тем, что знаете?
25 сен 12, 23:19    [13221978]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
Shiro-kuro
Member

Откуда:
Сообщений: 77
pkarklin,
спасибо за совет.х)))
но новому учиться всегда надо,иначе бы ничего не развивалось, и люди были бы амебами какими-то сейчас по вашей логике...
25 сен 12, 23:24    [13221999]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Shiro-kuro,

Учиться - это не значит заявлять: "Я не знаю как сделать.". Учиться - это значит, я пробовал(а) так, так и так, но не получается. Отсюда закономерный вопрос - как пробовали?

Сообщение было отредактировано: 25 сен 12, 23:28
25 сен 12, 23:28    [13222028]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
Shiro-kuro
SELECT c.FName,c.LName
FROM Customer c
JOIN [Order] o ON o.IdCust=c.IdCust 
-- JOIN OrdItem oi ON oi.IdOrd=o.IdOrd  -- зачем это джойнить?
-- AND o.IdOrd=4


Попробуйте LEFT JOIN, и WHERE o. IdCust IS NULL там тоже пригодится.
25 сен 12, 23:33    [13222059]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Shiro-kuro,

автор
список покупателей,ничего не заказывавших


Дайте решение этой задачи на русском языке.
25 сен 12, 23:36    [13222072]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Shiro-kuro,

У Вас есть таблица заказов Order. Берете таблицу клиентов Customer, присоединяете к ней таблицу заказов по полю IdCust, получаете клиентов и заказы. Используя условие where order.IdOrd is null, выбираете тех клиентов, по которым количество заказов = 0, то есть клиентов, которых ничего не заказывали.
Select c.FName,c.LName
FROM Customer c
JOIN [Order] o ON o.IdCust=c.IdCust
where o.IdOrd is null
26 сен 12, 00:53    [13222279]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
Shiro-kuro
Member

Откуда:
Сообщений: 77
Andy_OLAP,hallabud Большое Вам Спасибо!!!!!теперь все понял.=)))
(до этого писал AND WHERE и ничего не получалось)ХХ
26 сен 12, 08:37    [13222711]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Andy_OLAP
Shiro-kuro,

У Вас есть таблица заказов Order. Берете таблицу клиентов Customer, присоединяете к ней таблицу заказов по полю IdCust, получаете клиентов и заказы. Используя условие where order.IdOrd is null, выбираете тех клиентов, по которым количество заказов = 0, то есть клиентов, которых ничего не заказывали.
Select c.FName,c.LName
FROM Customer c
JOIN [Order] o ON o.IdCust=c.IdCust
where o.IdOrd is null
Запрос совсем неправильный, даже не с ошибкой, а в принципе :-)

Нужно использовать NOT EXISTS:
SELECT c.FName,c.LName
FROM Customer c
WHERE NOT EXISTS(
	SELECT *
	FROM [Order] o 
	WHERE o.IdCust=c.IdCust 
)
26 сен 12, 11:00    [13223587]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
alexeyvg
Запрос совсем неправильный, даже не с ошибкой, а в принципе :-)

Нужно использовать NOT EXISTS:
SELECT c.FName,c.LName
FROM Customer c
WHERE NOT EXISTS(
	SELECT *
	FROM [Order] o 
	WHERE o.IdCust=c.IdCust 
)

NOT EXISTS, понятно, лучше. Но чем Вам JOIN не нравится, разве могут вернуться строки с NULL-вым IdOrd, это же иденфикатор заказа, там NULL теоретически быть может, а практически вероятность этого равна 0?
26 сен 12, 13:08    [13224830]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Andy_OLAP
разве могут вернуться строки с NULL-вым IdOrd
Да, правильно. Поэтому такой запрос никогда не вернёт записей.
Select c.FName,c.LName
FROM Customer c
JOIN [Order] o ON o.IdCust=c.IdCust 
where o.IdOrd is null
Я говорю, сам запрос абсурден: "вернуть записи из Customer, для которых есть записи в Order, так что бы не было записей из Order".
26 сен 12, 15:17    [13226286]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
SELECT
	c.FName, 
	c.LName
FROM Customer c LEFT OUTER JOIN [Order] o 
	ON o.IdCust = c.IdCust 
where 
	o.IdOrd is null


"кастомеры , которые не заказывали" имелось ввиду , наверное
26 сен 12, 15:21    [13226320]     Ответить | Цитировать Сообщить модератору
 Re: запрос с JOIN  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
alexeyvg
Я говорю, сам запрос абсурден: "вернуть записи из Customer, для которых есть записи в Order, так что бы не было записей из Order".

Мдааа, вот что значит не выспался - пропустил LEFT. Но форумчанин "Konst_One" уже указал, как правильно пишется. Думаю, автор темы и сам разобрался.
26 сен 12, 15:26    [13226368]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить