Запрос Помогите Сделать

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 13 янв 2013.

Статус темы:
Закрыта.
  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Хочу выбрать из спр-ка Клиентов элементы, НЕ участвовавшие в документах.
    Код ( (Unknown Language)):
    ВЫБРАТЬ
    Клиенты.Ссылка КАК СсылкаКли,
    Контакт.Ссылка КАК СсылкаДок
    ИЗ
    Справочник.Клиенты КАК Клиенты
    ПРАВОЕ СОЕДИНЕНИЕ Документ.Контакт КАК Контакт
    ПО (Контакт.Клиент = Клиенты.Ссылка)
    ГДЕ
    Клиенты.Родитель = &Родитель
    И Контакт.Дата МЕЖДУ &ДатаН И &ДатаК
    Понимаю так, что надо поставить условие на "СсылкаДок" равен null. Но даже в этом запросе я ожидал, что получу ВСЕ записи клиентов и у некоторых будут пустые ссылки на документы. Но в итоге я получаю только несколько строк, задействованных в документах.
     
  2. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    значит по условию не проходят остальные
     
  3. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Во-первых, я не понял, нужно ли получить клиентов , ссылки на которые есть в документах, не входящих в интервал.
    "Понимаю так, что надо поставить условие на "СсылкаДок" равен null. Но даже в этом запросе я ожидал, что получу ВСЕ записи клиентов и у некоторых будут пустые ссылки на документы." - помните, что условие в секции ГДЕ накладывается логически после соединений. Null явно не входит в интервал.
    В данном случае, похоже, что условие на вхождение в интервал надо перенсти в секцию ПО, а в секции ГДЕ сделать условие ЕСТЬ NULL.

    Добавлено: А что за экзамен-то?

    Добавлено: И еще одна ошибка - соединение не правое нужно, а левое, чтобы клиентов вы получали всех.
     
  4. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Да прикалываюсь я.

    Я так сначала и сделал. Ка-то внешне результат одинаковый

    Повторю задание:
    - Клиенты нужны из всего спр-ка (группы)
    - кроме тех, кто встречается в документах (только этого интервала)
    Цель Запроса - мертвые клиенты.

    Я думаю, что принципиально ГДЕ не подходит. Должен быть отдельный набор, построенный по документам, а потом вторым щагом набор из спр-ка отсеивается. Придется почитать синтаксис, искать слова "Входит" "В" и т.д.
     
  5. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    ВЫБРАТЬ
    Клиенты.Ссылка КАК СсылкаКли,
    Контакт.Ссылка КАК СсылкаДок
    ИЗ
    Справочник.Клиенты КАК Клиенты
    Левое СОЕДИНЕНИЕ Документ.Контакт КАК Контакт
    ПО (Контакт.Клиент = Клиенты.Ссылка)
    И( Контакт.Дата МЕЖДУ &ДатаН И &ДатаК)
    ГДЕ
    Клиенты.Родитель = &Родитель
    И Контакт.ссылка ЕСТЬ Null
     
  6. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ИЗВЕРГИ! Зачем вам эти джойны в этой задаче?

    Код ( (Unknown Language)):
    Выбрать Клиенты.Ссылка
    из
    Справочник.Клиенты КАК Клиенты
    ГДЕ
    Клиенты.Родитель = &Родитель // тут может таки в иерархии??
    и не Клиенты.ссылка в (Выбрать Различные Контакт.Клиент из Документ.Контакт КАК Контакт где Контакт.Дата МЕЖДУ &ДатаН И &ДатаК)
     
  7. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    "ИЗВЕРГИ! Зачем вам эти джойны в этой задаче?"
    А что, вложенный запрос лучше джойна?
     
  8. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    А кстати интересный вопрос! Только чтоб проверить, выборка должна быть здоровенная.
     
  9. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Ну что, парни! Проверил.

    Спасибо unknown181538 и puh14. Вариант unknown181538 ближе к моим исходным мыслям, просветил меня по условию. Теперь понимаю, почему в результатах не было Null. Вариант puh14 соответствует альтернативной мысли.

    Разбор полетов:
    1) Оба выдали одинаковый результат. Ставлю обоим зачет :(
    2) А теперь самое удивительное. По скорости. Дал запрос за год, клиентов до 1 тысячи, документов около 3-4 тыс. база файловая.
    Предполагал, что в силу простоты вариант unknown181538 быстрее. Ну, думаю, а puh14 похвалю тем, что его вариант красивше, особенно, если понадобится делать анализ не по одному виду документов.
    А нетушки! puh14 бегал молниеносно! Консоль просто моргала и выдавала результат. А unknown181538 замирал на 1-2 секунды.
    Честное слово - сам не ожидал! Я как-то не раз задумывался над вложенными запросами. И этот пример - хороший урок.
     
  10. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    В силу простоты ничего не бывает, надо смотреть на индексы и планы выполнения. И тогда делать выводы.
    Вложенные запросы по своей сути уже зло, т.к. это овер. Но не все так просто.

    А тут еще играет то что - клиентов до 1 тысячи, документов около 3-4 тыс., но не сильно должно сказыватся на производительность, т.к. всеже данных и там и там ничтожно мало.
     
  11. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Есть еще вариант с индексированной временной таблицей, но тогда он гарантировано сначала считает ее полностью, а в варианте со вложенным запросом, возможно, соптимизирует.
    Поэтому, на мой взгляд, вложенный запрос может даже оказаться быстрее.
    Имхо, опять же, вложенный запрос - зло с точки зрения читабельности, но тут запрос маленький.
    А еще нужно помнить про кэширование. Не факт, что Дайнеко это учел)
     
  12. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Эй, мальчиши-кибальчиши! Че так зло набросились? :huh:
    Читабельность - важнейшая для меня штука. И на пуховский вариант по этому поводу не плюнешь. Весьма очевидно: шаг первый - просмотрели доки, шаг второй - приложили их к клиентам. Человек руками делал бы так-же.

    А тут о быстродействии подумал. Только отбросим всякие индексы и кэши в строну. Наверное, все-таки есть более резонная причина.
    Поставьте себя на место сервера.
    Вариант 2 (специально с конца рассмотрю). Просмотрел доки - сделал список клиентов, сплющил в уникальный набор. А потом занялся объединение двух, относительно небольших, списков клиентов.
    Вариант 1 Взял первого клиента, к нему поискал его доки, взял второго - опять пересмотрел доки. И т.д. Значит пересмотров будет много. А ускоряющие примочки дело не поправят. Да и не будешь индексировать все реквизиты документов ради отчета редкого анализа.

    Вывод: скорость геометрически зависит от размеров объединяемых множеств. Объединение 1тыс и 4 тыс. будет дольше чем 1тыс на 1 тыс не в 4 раза, а, грубо говоря, в 16 минус оптимизация примочек. Т.е. раз в 10.
     
  13. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    Человек может и так, а вот оптимизатор не смотрит на как бы человек сделал.

    Добавлено:
    Тогда идите коровам хвосты крутить. При работе с базами это одно из важных моментов, отбросив его - туда летит и база.
     
  14. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Полегче, любезный! Я не привык сносить грубости от разгоряченного мальчишки.
     
  15. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    Еще один мальчик беструсый. и где вас только выпускают?
    Вы бы лучше прислушались да почитали про что говорят, чтоб в дальнейшем грамотнее быть и пургу не нести... да и для работы полезно
     
  16. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Я-то сообщение сразу увидел. Но ответа в таком-же духе не будет.
     
  17. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Наберите в любой типовой конфе в поиске "(Выбрать" и увидите частоту использования вложенных запросов. Сомневаюсь, что разработчики идиоты. Так что данный способ право на существование имеет.
     
  18. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    Никто не говорил что вложенные нельзя юзать, речь лишь о том что сами по себе они зло, но в некоторых случаях необходимое.
    кто его знает, может и идиоты... сомнения - удел невест.
     
  19. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну тогда поучите разработчиков как им работать, глядишь что толковое выйдет.
     
  20. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    И тут есть кого поучить. Тут даже прикольнее. :huh:
     
Загрузка...
Похожие Темы - Запрос Помогите Сделать
  1. sery80
    Ответов:
    0
    Просмотров:
    1.429
  2. Ivan3333567
    Ответов:
    2
    Просмотров:
    1.413
  3. МарФа
    Ответов:
    4
    Просмотров:
    1.655
  4. samurai
    Ответов:
    1
    Просмотров:
    1.817
  5. Allexei
    Ответов:
    8
    Просмотров:
    2.773
Статус темы:
Закрыта.

Поделиться этой страницей