powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос UNION (а потом оказалось, что вовсе и не UNION)
25 сообщений из 25, страница 1 из 1
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32534336
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже стыдно спрашивать, но у меня не получается запрос, наверно это будет запрос UNION.
Суть - Таблица "Адрес" со стороны 1 и таблица "Товары" со стороны многие.
Как в конструкторе запросов получить примерно такой результат?
Код: plaintext
1.
2.
3.
4.
5.
Адрес:            Товары:
Ивантеевка       Товар1
Ивантеевка       Товар2
Ивантеевка       Товар3
Ивановка        Товар2
Ивановка        Товар1
Может я конечно совсем ничего не понимаю, но у меня почему-то запрос возвращает какие-то странные записи с пустыми полями. А пустых полей в базе нет.
Т.е. как объединить все строки из отношения со стороны один со всеми строками со стороны отношения многие?
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32534357
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТаблица "Адрес" со стороны 1 и таблица "Товары" со стороны многие.

Ни фига непохоже. Как Адрес со стороны 1 если у одного товара м.б. 2 адреса?
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32534371
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное все таки не UNION, a inner join

И, вообще, - что в конструкторе не получается - он вроде такие элементарные запросы и сам нне поло строит

Делаешь в конструкторе и смотришь, что он там написал в SQL строке
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535589
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Ни фига непохоже. Как Адрес со стороны 1 если у одного
>товара м.б. 2 адреса?
В том то и дело, что мне надо получить такой результат.

А проблема в том, что я в конструкторе построил простую выборку (SELECT), а результат запроса не возвращает ни одной записи.

Т.е. я не знаю, как сделать, чтобы в запросе отображались все введенные записи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Вот что построилось в конструкторе:
SELECT тбл_покупка.пк_дата AS Дата, тбл_покупка.пк_время AS Время, 
тбл_каналы.кн_наименование_канала AS Канал,
 тбл_типы_каналов.тк_наименование_типа_канала AS Тип_канала, 
тбл_сектора.ср_наименование_сектора AS Сектор, тбл_адрес.ад_адрес AS 
Адрес, тбл_типы_брэндов.тб_наименование_брэнда AS Брэнд, 
тбл_типы_товаров.тт_наименование_товара AS Товар, 
тбл_типы_упаковки.ту_наименование_упаковки AS Упаковка, 
тбл_жирность.жн_наименование_жирности AS Жирность, 
тбл_объем.об_наименование_объема AS Объем, тбл_цена.цн_цена AS Цена, 
тбл_типы_операций.то_наименование_операции AS Операция, 
тбл_источник.ис_наименование_источника AS [Источник]
FROM тбл_цена INNER JOIN (тбл_типы_упаковки INNER JOIN (тбл_типы_товаров 
INNER JOIN (тбл_типы_брэндов INNER JOIN (тбл_объем INNER JOIN 
([тбл_источник] INNER JOIN (тбл_жирность INNER JOIN (тбл_каналы INNER JOIN 
((тбл_типы_каналов INNER JOIN тбл_каналы_типы ON 
тбл_типы_каналов.тк_код_типа_канала = 
тбл_каналы_типы.кт_код_наименование_типа_канала) INNER JOIN (тбл_адрес 
INNER JOIN ((тбл_сектора INNER JOIN тбл_адрес_сектор ON 
тбл_сектора.ср_код_сектора = тбл_адрес_сектор.ас_код_сектора) INNER JOIN
 (тбл_типы_операций INNER JOIN (тбл_номенклатура_товаров INNER JOIN 
(тбл_покупка INNER JOIN тбл_мониторинг ON тбл_покупка.пк_код_покупки = 
тбл_мониторинг.мт_код_покупки) ON 
тбл_номенклатура_товаров.нт_код_номенклатура_товаров = 
тбл_мониторинг.мт_код_номенклатура_товаров) ON 
тбл_типы_операций.то_код_операции = тбл_мониторинг.мт_код_операции) ON 
тбл_адрес_сектор.ас_код_адрес_сектор = 
тбл_мониторинг.мт_код_адрес_сектор) ON тбл_адрес.ад_код_адреса = 
тбл_адрес_сектор.ас_код_адреса) ON тбл_каналы_типы.кт_код_канала_типа = 
тбл_мониторинг.мт_код_канала_типа) ON тбл_каналы.кн_код_канала = 
тбл_каналы_типы.кт_код_наименование_канала) ON 
тбл_жирность.жн_код_жирности = 
тбл_номенклатура_товаров.нт_код_жирности) ON 
тбл_источник.ис_код_источника = тбл_мониторинг.мт_код_источника) ON 
тбл_объем.об_код_объема = тбл_номенклатура_товаров.нт_код_объема) ON 
тбл_типы_брэндов.тб_код_брэнда = 
тбл_номенклатура_товаров.нт_код_брэнда) ON 
тбл_типы_товаров.тт_код_типа_товара = 
тбл_номенклатура_товаров.нт_код_типа_товара) ON 
тбл_типы_упаковки.ту_код_упаковки = 
тбл_номенклатура_товаров.нт_код_упаковки) ON тбл_цена.цн_код_цены = 
тбл_номенклатура_товаров.нт_код_цены
WHERE (((тбл_мониторинг.мт_выгрузка)<>True));
В приложенном файлике схема данных. Я уже и про запросы почитал, но что-то не получается у меня нужный мне запрос.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535591
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ё...
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535594
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю, что это слишком круто выкладывать всю схему данных, но иначе я просто не могу на пальцах объяснить что мне нужно.
Там конечно, может быть уж не все супер-пупер нормализованно, но суть не в этом.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535603
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Да в схеме-то все замечательно, придраться не к чему. Я ёкнул от ее размера. Не думаю, что кто-то сможет при такой сложной схеме что-то предложить заочно...
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535613
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что все-таки надо получить?
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535625
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В "тбл_адрес" вводится адрес магазина, а в таблицах "тбл_типы_брэндов", "тбл_типы_товаров", "тбл_типы_упаковки", "тбл_жирность", "тбл_объем", "тбл_цена", вводится товар. Соответственно "тбл_номенклатура товаров" - просто промежуточная таблица.

Я ввожу один адрес и на один адрес приходится много товаров.
Т.е. пользователь со строны 1 ввел адрес
Код: plaintext
Ивантеевка
, а со стороны многие ввел много товаров
Код: plaintext
Товар1, Товар2, Товар3, ... ТоварN.
А как мне в запросе получить такую строку
Код: plaintext
1.
2.
3.
4.
5.
Адрес          Товар
Ивантеевка  Товар1
Ивантеевка  Товар2
Ивантеевка  Товар3
Ивантеевка  Товар...
Ивантеевка  ТоварN 
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535627
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечание не по существу вопроса: не слишком ли ты занормализовался в этой базе? Нах столько таблиц? Лучше пожертвовать местом, чем понятностью и удобочитаемостью.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535630
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Темный:
Тогда можно убрать те 11 таблиц, где всего по 2 поля. Но с другой стороны - не удобочитаемостью единой жив человек...
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535632
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда простейшие запросы в такой структуре нельзя написать за 10 секунд - то нах такую структуру :)
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535633
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ работать быстрее будет
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535635
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Почему нельзя написать за 10 секунд? Можно. В конструкторе запросов.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535637
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА проблема в том, что я в конструкторе построил простую выборку (SELECT), а результат запроса не возвращает ни одной записи.

Ню-ню... :)
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535639
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вот, а результатом моего запроса почему-то является пустая строка?
Т.е. я в конструкторе просто записываю все поля, которые мне нужны. (Простая выборка SELECT).
Что мне надо добавить в запрос, чтобы получить данные?
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535643
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Темный
Чего придираешься? Нормальная структура.
Так устроит ?
Код: plaintext
1.
select тбл_адрес.ад_адрес,тбл_типы_товаров.тт_наименование_товара
from тбл_адрес,тбл_типы_товаров
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535645
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дык, я думаю, очевидно, что проблема в данных. Если в запросе все inner join'ы заменить на left и right так, чтобы выдавались все данные из таблиц на стороне "many", то и данные будут видны, и (по дыркам в таблицах на стороне "one") станет видно, почему их не было видно раньше.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535648
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, не буду придираться. В конце клнцов не мне с ней ковыряться потом.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535660
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так.
На все что на стороне один - RIGHT JOIN, на стороне многие - LEFT JOIN.

Т.е. у меня в схеме данных, все что слева от "тбл_мониторинг" - находится на стороне отношения один, а то, что со стороны многие - находится справа от "тбл_мониторинг".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
SELECT тбл_покупка.пк_дата AS Дата, тбл_покупка.пк_время AS Время,
 тбл_каналы.кн_наименование_канала AS Канал, 
тбл_типы_каналов.тк_наименование_типа_канала AS Тип_канала, 
тбл_сектора.ср_наименование_сектора AS Сектор, тбл_адрес.ад_адрес AS 
Адрес, тбл_типы_брэндов.тб_наименование_брэнда AS Брэнд, 
тбл_типы_товаров.тт_наименование_товара AS Товар, 
тбл_типы_упаковки.ту_наименование_упаковки AS Упаковка, 
тбл_жирность.жн_наименование_жирности AS Жирность, 
тбл_объем.об_наименование_объема AS Объем, тбл_цена.цн_цена AS Цена, 
тбл_типы_операций.то_наименование_операции AS Операция, 
тбл_источник.ис_наименование_источника AS [Источник]
FROM тбл_цена LEFT JOIN (тбл_типы_упаковки LEFT JOIN (тбл_типы_товаров 
LEFT JOIN (тбл_типы_брэндов LEFT JOIN (тбл_объем LEFT JOIN ([тбл_источник]
 LEFT JOIN (тбл_жирность LEFT JOIN (тбл_каналы RIGHT JOIN 
((тбл_типы_каналов RIGHT JOIN тбл_каналы_типы ON 
тбл_типы_каналов.тк_код_типа_канала = 
тбл_каналы_типы.кт_код_наименование_типа_канала) RIGHT JOIN (тбл_адрес 
RIGHT JOIN ((тбл_сектора RIGHT JOIN тбл_адрес_сектор ON 
тбл_сектора.ср_код_сектора = тбл_адрес_сектор.ас_код_сектора) LEFT JOIN 
(тбл_типы_операций LEFT JOIN (тбл_номенклатура_товаров LEFT JOIN 
(тбл_покупка RIGHT JOIN тбл_мониторинг ON тбл_покупка.пк_код_покупки = 
тбл_мониторинг.мт_код_покупки) ON 
тбл_номенклатура_товаров.нт_код_номенклатура_товаров = 
тбл_мониторинг.мт_код_номенклатура_товаров) ON 
тбл_типы_операций.то_код_операции = тбл_мониторинг.мт_код_операции) ON 
тбл_адрес_сектор.ас_код_адрес_сектор = 
тбл_мониторинг.мт_код_адрес_сектор) ON тбл_адрес.ад_код_адреса = 
тбл_адрес_сектор.ас_код_адреса) ON тбл_каналы_типы.кт_код_канала_типа = 
тбл_мониторинг.мт_код_канала_типа) ON тбл_каналы.кн_код_канала = 
тбл_каналы_типы.кт_код_наименование_канала) ON 
тбл_жирность.жн_код_жирности = 
тбл_номенклатура_товаров.нт_код_жирности) ON 
тбл_источник.ис_код_источника = тбл_мониторинг.мт_код_источника) ON 
тбл_объем.об_код_объема = тбл_номенклатура_товаров.нт_код_объема) ON 
тбл_типы_брэндов.тб_код_брэнда = 
тбл_номенклатура_товаров.нт_код_брэнда) ON 
тбл_типы_товаров.тт_код_типа_товара = 
тбл_номенклатура_товаров.нт_код_типа_товара) ON 
тбл_типы_упаковки.ту_код_упаковки = 
тбл_номенклатура_товаров.нт_код_упаковки) ON тбл_цена.цн_код_цены = 
тбл_номенклатура_товаров.нт_код_цены
WHERE (((тбл_мониторинг.мт_выгрузка)<>True));
Access пишет:
Не поддерживается выражение объединения. (Ошибка 3296)
Возможные причины:
Результаты выполнения инструкции SQL, содержащей множественные объединения, зависят от порядка выполнения объединений. Для того чтобы указать, какое из объединений необходимо выполнить первым, следует создать отдельный запрос, в котором выполняется первое объединение, а затем включить этот запрос в инструкцию SQL.
Инструкция ON в операции JOIN является неполной или содержит слишком много таблиц. Попробуйте включить инструкцию ON в предложение WHERE.

Что делать?
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535661
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попоробовал RIGHT c LEFT поменять местами - та же ошибка. :-(
Может я не все правильно понял?
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535663
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я бы побоялся править такой сложный селект руками. Берешь исходный селект, открываешь в конструкторе и меняешь правым кликом свойства связей так, чтобы все стрелки шли от середины в стороны.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535667
Фотография schakh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так...
Идеш в конструктор и выбирай по одной таблице. Как будто заново строишь
Добавил табличку, выбрал поля, запустил и т.д Не надо все скопом, запутаться в этой простыне ничего не стоит
Где встрянет, там сразу разберешся что к чему
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535672
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое. Помогло.

P.S. Просьба к модераторам как-нибудь переименовать этот топик, т.к. мне кажется, что я неправильно его назвал и название не отображает содержание топика.
...
Рейтинг: 0 / 0
Запрос UNION (а потом оказалось, что вовсе и не UNION)
    #32535674
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Переименовано.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос UNION (а потом оказалось, что вовсе и не UNION)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]