Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Запрос. Связь таблиц по полям составного типа данных / 10 сообщений из 10, страница 1 из 1
25.06.2012, 11:07
    #37852953
Rudge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
1-ая таблица1: поле1_1(составной тип данных:Справочник1, Справочник2), поле1_2(какое-то число, всегда не NULL)
2-ая таблица2: поле2_1(составной тип данных аналогично поле1_1), поле2_1(какое-то число, всегда не NULL).
Справочник1 и Справочник2 связаны реквизитом.
Нужно гарантировано состыковать таблицы по поле1_1 = поле2_1, чтобы не было значений NULL.
...
Рейтинг: 0 / 0
25.06.2012, 11:18
    #37852979
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
Если не указать в запросе режим соеденения ЛЕВОЕ|ПРАВОЕ|ПОЛНОЕ ВНЕШНЕЕ , то получите необходимый результат.

Если не указать, то (из справки):
[ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих исходных таблиц – источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают.

Ключевое слова ВНУТРЕНЕЕ можно не указывать вообще, оно повышает наглядность и удобочитаемость текста запроса.
...
Рейтинг: 0 / 0
25.06.2012, 11:37
    #37853037
Rudge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
Сделал внутреннее соединение - вообще пустая выборка.

Объясню более подробно, у меня 1-ая таблица содержит количество планируемого объема работы по полю ТС (составной тип данных: Справочник.ТранспортныеСредства или Справочник.МодельТС), 2-ая таблица содержит нормы расхода ГСМ, где измерение ТС также составного типа(Справочник.ТранспортныеСредства или Справочник.МодельТС). Оба справочника ТранспортныеСредства или МодельТС связаны реквизитом.
Т.е. получается если в 1-й таблице выбрано ТС, а во 2-й таблице нормы установлены на Модель, то как составить запрос, чтобы он в любом случае установил соответствие и взял норму расхода?
...
Рейтинг: 0 / 0
25.06.2012, 11:38
    #37853039
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
выбрать
Таб1.Поле1 как Справочник1,
Таб1.Поле2 как Число1,
Таб2.Поле1 как Справочник2,
Таб2.Поле2 как Число2
из
Таб1
внутреннее соединение
Таб2
по Выразить(Таб1.Поле1 как Справочник.Справочник1).Реквизит= Выразить(Таб2.Поле1 как Справочник.Справочник2).Реквизит

...
через Выразить приводим Поле1 к нужному виду справочника
...
Рейтинг: 0 / 0
25.06.2012, 12:24
    #37853131
Rudge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
Справочник1 связан со Справочник2 реквизитом Рек1(тип СправочникСсылка.Справочник2).

Тогда в условии сцепления пишу так:

по Выразить(Таб1.Поле1 как Справочник.Справочник1).Рек1= Выразить(Таб2.Поле1 как Справочник.Справочник2).Ссылка

Работает, но получается теперь наоборот, для тех случаев когда типы совпадают(поле1_1 = Справочник1 и поле1_1=Справочник1), возвращает NULL.
...
Рейтинг: 0 / 0
25.06.2012, 12:45
    #37853167
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
Rudge,
Для ссылки (ссылок) не надо писать выразить.

... = Выразить(Таб2.Поле1 как Справочник.Справочник2).Ссылка , это можно заменить
на
... = Таб2.Поле1
...
Рейтинг: 0 / 0
25.06.2012, 13:03
    #37853193
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
RudgeСправочник1 связан со Справочник2 реквизитом Рек1(тип СправочникСсылка.Справочник2).

Тогда в условии сцепления пишу так:

по Выразить(Таб1.Поле1 как Справочник.Справочник1).Рек1= Выразить(Таб2.Поле1 как Справочник.Справочник2).Ссылка

Работает, но получается теперь наоборот, для тех случаев когда типы совпадают(поле1_1 = Справочник1 и поле1_1=Справочник1), возвращает NULL.

Точнее такой строки нет в результате?

Используйте ОБЪЕДЕНИТЬ и указывайте разные условия объеденения или в условии объединения используйте ВЫБОР.
...
Рейтинг: 0 / 0
25.06.2012, 13:54
    #37853290
Rudge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
Спасибо всем. Объединил и упростил, теперь выводит то, что нужно.

ВЫБРАТЬ
<...>
по Выразить(Таб1.Поле1_1 как Справочник.Справочник1).Рек1= Таб2.Поле2_1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
<...>
по Таб1.Поле1_1 = Таб2.Поле2_1
...
Рейтинг: 0 / 0
25.06.2012, 14:08
    #37853321
LexaK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
Rudge,

можно упростить ваш запрос

ВЫБРАТЬ
<...>
по Выразить(Таб1.Поле1_1 как Справочник.Справочник1).Рек1= Таб2.Поле2_1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
<...>
по Таб1.Поле1_1 = Таб2.Поле2_1

--------------------------

ВЫБРАТЬ
<...>
по Выразить(Таб1.Поле1_1 как Справочник.Справочник1).Рек1= Таб2.Поле2_1
или Таб1.Поле1_1 = Таб2.Поле2_1
...
Рейтинг: 0 / 0
25.06.2012, 15:32
    #37853444
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос. Связь таблиц по полям составного типа данных
зачем что-то выражать?
Код: sql
1.
2.
3.
4.
5.
SELECT ...
INNER JOIN ...
UNION [ALL]
SELECT ...
INNER JOIN ...


такой конструкции вполне достаточно.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Запрос. Связь таблиц по полям составного типа данных / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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