Перейти к содержимому

Фото
- - - - -

SQL


  • Вы не можете создать новую тему
  • Please log in to reply
13 ответов в этой теме

#1 Санька

Санька
  • Пользователь
  • 106 сообщений
  • Откуда:Tallinn

Отправлено 03 июня 2011 - 13:47

Помогите, пожалуйста, те, кто разбираются в SQL.
Как разбить запрос, чтобы не использовать Inner join и Right join вместе, т.к это невозможно.
Возможно, создать временную таблицу..

Вот мой код и прикрепляю ещё скрин дизайна запроса.

SELECT Tellimus.kuupaev, Tellimus.staatus, Sum(Nz([kogus],0)*Nz([hind],0)) AS summa, Tellimus.aadress, Tellimus.Tellimus_ID
FROM Pizza INNER JOIN (Tellimuste_rida RIGHT JOIN Tellimus ON Tellimuste_rida.Tellimus_ID = Tellimus.Tellimus_ID) ON Pizza.Pizza_ID = Tellimuste_rida.Pizza_ID
GROUP BY Tellimus.kuupaev, Tellimus.staatus, Tellimus.aadress, Tellimus.Tellimus_ID
ORDER BY Tellimus.kuupaev DESC;

Когда заказ (Tellimus) создаётся, ещё нет связи с Tellimuste_rida и Pizza, сумма должна быть равна нулю. Это значит,что данные должны
черпаться из Tellimus'a.. Как можно это сделать?

За любые ответы, большое спасибо.

Прикрепленные файлы

  • Прикрепленный файл  screen.jpg   121,33К   47 Количество загрузок

  • 0
IAPB
___________________________
Can you feel a little love?

#2 glteam

glteam
  • Пользователь
  • 16 сообщений

Отправлено 03 июня 2011 - 13:53

поставь переменную по умолчанию
  • 0

http://www.autokoda.ee - Tel.: + 372 58 53 2000 Akadeemia tee 78 Tallinn


#3 Санька

Санька
  • Пользователь
  • 106 сообщений
  • Откуда:Tallinn

Отправлено 03 июня 2011 - 15:00

glteam, спасибо, об этом я не думала)
а не могли бы объяснить, как это можно сделать?(я не понимаю, куда это можно вставить, ведь сумма это expression)
  • 0
IAPB
___________________________
Can you feel a little love?

#4 glteam

glteam
  • Пользователь
  • 16 сообщений

Отправлено 03 июня 2011 - 15:08

а как же свойства полей?
  • 0

http://www.autokoda.ee - Tel.: + 372 58 53 2000 Akadeemia tee 78 Tallinn


#5 Санька

Санька
  • Пользователь
  • 106 сообщений
  • Откуда:Tallinn

Отправлено 03 июня 2011 - 15:15

хм, если даже я задаю сумму по дефолту, то по связи без LEFT JOIN, получается,что будут выдаваться только те строки, где равны значения у Tellimus'a и Tellimuste_rida. Разве нет?
  • 0
IAPB
___________________________
Can you feel a little love?

#6 Vitalts

Vitalts
  • Постоялец
  • 1 852 сообщений

Отправлено 03 июня 2011 - 16:41

Что мешает использовать left join?

Сообщение изменено: Vitalts (03 июня 2011 - 16:44 )

  • 0

#7 Санька

Санька
  • Пользователь
  • 106 сообщений
  • Откуда:Tallinn

Отправлено 03 июня 2011 - 16:48

Vitalts, access пишет о "ambiguous outer joins" и предлагает разбить связи на разные запросы. ) а вот как это сделать я не знаю..
  • 0
IAPB
___________________________
Can you feel a little love?

#8 Cerfy

Cerfy
  • Пользователь
  • 235 сообщений

Отправлено 03 июня 2011 - 17:41

какойто не здоровый запрос

селекть из теллимуса и два одельных лефт аутер джойна на теллимусрида и пиццу.

select blabla
from tellimus
left outer join Tellimuste_rida on Tellimuste_rida.Tellimus_ID = tellimus.Tellimus_ID
left outer join pizza on ON Pizza.Pizza_ID = Tellimuste_rida.Pizza_ID

в подсчtте суммы используй coalesce

ну или гораздо проще и наверое понятнее это в селекте написать другой селект

select kuupaev, blabla, (SELECT sum (hind*kogus) from tellimus_rida inner join pizza on ... where tellimus_rida.tellimus_id = tellimus.id) as summa from tellimus

Сообщение изменено: Cerfy (03 июня 2011 - 17:32 )

  • 1
Don't forget, kids...
The more posts you have, the bigger your penis is.

#9 Санька

Санька
  • Пользователь
  • 106 сообщений
  • Откуда:Tallinn

Отправлено 03 июня 2011 - 18:17

Cerfy, спасибо огромное)) очень помогли. всё работает!)
  • 0
IAPB
___________________________
Can you feel a little love?

#10 Шурик*

Шурик*
  • Постоялец
  • 1 130 сообщений

Отправлено 13 июня 2011 - 22:37

В Акцесе что то делать это позороще. Там все гламрненько и делается графически обычно.
А создание временной таблицы это оператор AS
Читай про синтаксис sql для гламурного акцеса, у каждой СУБД он разный.

Сообщение изменено: Шурик* (13 июня 2011 - 22:40 )

  • 0

#11 Vitalts

Vitalts
  • Постоялец
  • 1 852 сообщений

Отправлено 14 июня 2011 - 09:15

В Акцесе что то делать это позороще. Там все гламрненько и делается графически обычно.

Все зависит от нужд

А создание временной таблицы это оператор AS

Не городите чушь, AS - не создает никаких временных таблиц, он для создания алиаса таблицы или названия поля
  • 0

#12 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 14 июня 2011 - 10:28

Но согласитесь, как приятно придти в тему, сделать вид эксперта, насрать и закрыть ее? :wink:
  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!

#13 Vitalts

Vitalts
  • Постоялец
  • 1 852 сообщений

Отправлено 14 июня 2011 - 15:33

Но согласитесь, как приятно придти в тему, сделать вид эксперта, насрать и закрыть ее?

shb, считаете мой пост большей сранью, чем предыдущий? И никакого вида эксперта я не делал, лишь указал на ошибку утверждения. Ну и собственно, тему я также не закрывал :)
  • 0

#14 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 14 июня 2011 - 15:34

Vitalts, наоборот =)

Закрыть - я имел ввиду выйти из темы, довольный сделанным =)
  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!