Имя: Пароль:
1C
1С v8
Несвязанные таблицы в запросе
, ,
0 Max Street
 
03.05.13
18:39
Привет. Простой вопрос, но раньше с этим не сталкивался.
Можно ли в запросе(без пакетных и вложенных запросов) получать данные из двух НЕсвязанных таблиц? К примеру вот так:

"ВЫБРАТЬ
| ВзаиморасчетыСПокупателямиОстатки.СуммаОстаток,
| КурсыВалютСрезПоследних.Курс
| ИЗ
| РегистрНакопления.ВзаиморасчетыСПокупателями.Остатки(&МоментВремени, ) КАК ВзаиморасчетыСПокупателямиОстатки,
| РегистрСведений.КурсыВалют.СрезПоследних(&Дата, ) КАК КурсыВалютСрезПоследних";

Спасибо!
1 ДенисЧ
 
03.05.13
18:42
я не против..
2 zak555
 
03.05.13
18:42
получай
3 unregistered
 
03.05.13
18:44
(0) А смысл? Получишь декартово произведение двух множеств. И что ты будешь с этим делать?
4 EugeniaK
 
03.05.13
18:47
(0) Можно.
Только нужно, чтоб в обеих данные были.
5 zak555
 
03.05.13
18:48
(4) т.е. если в одной из не будет данные запрос ничего не вернёт ?
6 Max Street
 
03.05.13
18:49
Просто мне казалось, что таблицы должны быть обязательно связаны. Спасибо!
(3) Так получилось, что эти две таблицы мне не по чем связать, а данные надо получить и из РегистраНакопления, и из РегистраСведений
7 Jaap Vduul
 
03.05.13
18:49
Декартово произведение комбинирует каждую строку первой таблицы с каждой строкой второй таблицы. Вообще, декартово произведение двух таблиц, где первая таблица содержит п строк, а у второй таблицы т строк, создаст результат с количеством строк, равным п х т.

На практике декартово произведение используется крайне редко. Иногда пользователи генерируют декартово произведение двух таблиц, когда они забывают включить условие соединения в предложение where при использовании синтаксиса соединения «старого стиля». В этом случае выходной набор данных не будет соответствовать ожидаемому результату, потому что содержит слишком много строк. (Наличие очень большого количества неожидаемых строк в результате выборки данных является подсказкой, что было получено декартово произведение двух таблиц вместо ожидаемого естественного соединения).
8 EugeniaK
 
03.05.13
18:53
(5) Ничего не вернет.
(7) В том числе если в одной 5 строк, во второй 0, то в итоговой 5*0=0
(6) Почему не по чем?
Хотя бы по коду валюты.
9 shuhard
 
03.05.13
18:55
(6) на такой случай есть:
Объединить все
10 Max Street
 
03.05.13
18:57
(8) К сожалению, так тоже не получится
(9) А ОБЪЕДИНИТЬ ВСЕ лучше, чем просто получение данных из несвязанных таблиц?
11 Raybek
 
03.05.13
19:00
Если даже нет ключевого поля для связи, то какая подразумевается семантическая связь?

Проще говоря смысл в чем?
12 Raybek
 
03.05.13
19:01
(11) Что нужно в итоге получить?
13 zak555
 
03.05.13
19:03
(8) а если хочешь вернуть хоть что-то то нужно делать полное соединение
14 Max Street
 
03.05.13
19:10
(11) Нету ключевого поля для связи потому, что курс требуется получить на валюту, отличную от той, которая в измерении Взаиморасчетов.
Пример, приведенный в (0), условный, т.к. под рукой нету исходного кода
15 Max Street
 
03.05.13
19:12
Спасибо всем за помощь!
16 zak555
 
03.05.13
19:13
(11) по ИСТИНе
=)
17 GANR
 
03.05.13
19:31
18 unregistered
 
03.05.13
21:37
(14) >> курс требуется получить на валюту, отличную от той, которая в измерении Взаиморасчетов

И что?
Всё равно курс нужен по какой-то определенной валюте. Но ни как не по всем.
Кроме того, скорее всего, потребуется конвертация из валюты взаиморасчетов в какую-то другую валюту. Даже если это не валюта регламентированного учета, всё равно не может не быть условия связи.
Ну и наконец для конвертации важна дата курса. В примере из (0) это скорее всего будет либо дата остатков, либо дата документа взаиморасчетов, но ни как не все даты (нафига нам курс монгольского тугрика с 1990 года за каждый день, если тугрик не является ни валютой документа, ни валютой учета, ни валютой, в которой нам надо получить данные?...)