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

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

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

Делаешь в конструкторе и смотришь, что он там написал в SQL строке
...
Рейтинг: 0 / 0
26.05.2004, 21:39
    #32535589
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
>Ни фига непохоже. Как Адрес со стороны 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
26.05.2004, 21:41
    #32535591
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Ё...
...
Рейтинг: 0 / 0
26.05.2004, 21:45
    #32535594
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Я понимаю, что это слишком круто выкладывать всю схему данных, но иначе я просто не могу на пальцах объяснить что мне нужно.
Там конечно, может быть уж не все супер-пупер нормализованно, но суть не в этом.
...
Рейтинг: 0 / 0
26.05.2004, 21:56
    #32535603
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Да в схеме-то все замечательно, придраться не к чему. Я ёкнул от ее размера. Не думаю, что кто-то сможет при такой сложной схеме что-то предложить заочно...
...
Рейтинг: 0 / 0
26.05.2004, 22:06
    #32535613
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
А что все-таки надо получить?
...
Рейтинг: 0 / 0
26.05.2004, 22:18
    #32535625
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
В "тбл_адрес" вводится адрес магазина, а в таблицах "тбл_типы_брэндов", "тбл_типы_товаров", "тбл_типы_упаковки", "тбл_жирность", "тбл_объем", "тбл_цена", вводится товар. Соответственно "тбл_номенклатура товаров" - просто промежуточная таблица.

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

Ню-ню... :)
...
Рейтинг: 0 / 0
26.05.2004, 22:36
    #32535639
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Так вот, а результатом моего запроса почему-то является пустая строка?
Т.е. я в конструкторе просто записываю все поля, которые мне нужны. (Простая выборка SELECT).
Что мне надо добавить в запрос, чтобы получить данные?
...
Рейтинг: 0 / 0
26.05.2004, 22:47
    #32535643
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
2 Темный
Чего придираешься? Нормальная структура.
Так устроит ?
Код: plaintext
1.
select тбл_адрес.ад_адрес,тбл_типы_товаров.тт_наименование_товара
from тбл_адрес,тбл_типы_товаров
...
Рейтинг: 0 / 0
26.05.2004, 22:47
    #32535645
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Дык, я думаю, очевидно, что проблема в данных. Если в запросе все inner join'ы заменить на left и right так, чтобы выдавались все данные из таблиц на стороне "many", то и данные будут видны, и (по дыркам в таблицах на стороне "one") станет видно, почему их не было видно раньше.
...
Рейтинг: 0 / 0
26.05.2004, 22:54
    #32535648
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Ладно, не буду придираться. В конце клнцов не мне с ней ковыряться потом.
...
Рейтинг: 0 / 0
26.05.2004, 23:13
    #32535660
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Сделал так.
На все что на стороне один - 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
26.05.2004, 23:15
    #32535661
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Попоробовал RIGHT c LEFT поменять местами - та же ошибка. :-(
Может я не все правильно понял?
...
Рейтинг: 0 / 0
26.05.2004, 23:20
    #32535663
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Я бы побоялся править такой сложный селект руками. Берешь исходный селект, открываешь в конструкторе и меняешь правым кликом свойства связей так, чтобы все стрелки шли от середины в стороны.
...
Рейтинг: 0 / 0
26.05.2004, 23:29
    #32535667
schakh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Или так...
Идеш в конструктор и выбирай по одной таблице. Как будто заново строишь
Добавил табличку, выбрал поля, запустил и т.д Не надо все скопом, запутаться в этой простыне ничего не стоит
Где встрянет, там сразу разберешся что к чему
...
Рейтинг: 0 / 0
26.05.2004, 23:31
    #32535672
Gyslik.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос UNION (а потом оказалось, что вовсе и не UNION)
Спасибо большое. Помогло.

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


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