Имя: Пароль:
1C
1С v8
соединение нескольких таблиц SQL
0 Игорь_МММ
 
04.12.17
14:22
Command.CommandText = "Select DISTINCT
        |        TElems_2.CommonPOS,
        |        TElems_2.FurnType,
        |        TNNomenclature.Name AS Nomenclature,
        |        TElems_2.Name AS ElemName,
        |        TElems.UnitPos,
        |        TElems_2.ParentPOS,    
        |        TElems_2.Count
        |FROM TElems
        |LEFT JOIN TElems TElems_2
        |ON TElems.UnitPos=TElems_2.ParentPOS    
        |LEFT JOIN TNNomenclature TNNomenclature
        |ON TElems.PriceID=TNNomenclature.ID
        |ORDER BY TElems.UnitPos,TElems_2.FurnType";
гуру, подскажите в чем здесь проблема?
по поиску вроде такой же пример -https://technet.microsoft.com/ru-ru/library/ms191430(v=sql.105).aspx
ан, не взлетает ...
1 Ненавижу 1С
 
гуру
04.12.17
14:24
и в чем вопрос?
2 Ёпрст
 
04.12.17
14:24
(0) Что именно "не взлетает" ?
3 Игорь_МММ
 
04.12.17
14:25
Произошла исключительная ситуация (Microsoft JET Database Engine): Ошибка синтаксиса (пропущен оператор) в выражении запроса 'TElems.UnitPos=TElems_2.ParentPOS    
LEFT JOIN TNNomenclature TNNomenclature
ON TElems.PriceID=TNNomenclature.ID'.
4 Ёпрст
 
04.12.17
14:29
(3)
|FROM TElems TElems
5 Beduin
 
04.12.17
14:29
(0) Ты поля проверил? Все в наличии есть.
6 Ёпрст
 
04.12.17
14:30
ну и лучше, норм алиясы задавать
7 Игорь_МММ
 
04.12.17
14:36
(4) Command.CommandText = "Select DISTINCT
        |        TElems_2.CommonPOS,
        |        TElems_2.FurnType,
        |        TNNomenclature.Name AS Nomenclature,
        |        TElems_2.Name AS Name,
        |        TElems_1.UnitPos,
        |        TElems_2.ParentPOS,    
        |        TElems_2.Count
        |FROM TElems TElems_1
        |LEFT JOIN TElems TElems_2
        |ON TElems_1.UnitPos=TElems_2.ParentPOS    
        |LEFT JOIN TNNomenclature TNNomenclature
        |ON TElems_1.PriceID=TNNomenclature.ID
        |ORDER BY TElems_1.UnitPos,TElems_2.FurnType";

та же ... :
Произошла исключительная ситуация (Microsoft JET Database Engine): Ошибка синтаксиса (пропущен оператор) в выражении запроса 'TElems_1.UnitPos=TElems_2.ParentPOS    
LEFT JOIN TNNomenclature TNNomenclature
ON TElems_1.PriceID=TNNomenclature.ID'.

если без второго соединения все ОК. То же самое если убираю первое соедиение - тоже Ок. Что-то в соединениях ... между ними
(5) все есть
8 пипец
 
04.12.17
15:18
(7) хмм а если в SSMS визуально нарисовать ?
9 Ц_У
 
04.12.17
18:16
(7)
        |FROM TElems TElems_1
        |LEFT JOIN TElems TElems_2
что тут должно произойти?
10 Сергиус
 
05.12.17
02:23
(7)

|LEFT JOIN TNNomenclature TNNomenclature
|ON TElems_1.PriceID=TNNomenclature.ID

Попробуй здесь дать псевдоним, отличный от имени таблицы, например TNNomenclature_1
11 rphosts
 
05.12.17
04:39
(7) ну вообще-то предикат соединения принято оборачивать в () для лучшей читаемости. А те поля по которым соединяете они соединяемы (со строкой неограниченой длины вам соединить не получится)?
12 rphosts
 
05.12.17
04:49
Count как имя поля - жесть!
13 rphosts
 
05.12.17
04:51
select a.[_Period], b._Fld1841RRef, c._Period
from [dbo].[_InfoRg1840] a
left join [dbo].[_InfoRg1840] b on (a.[_Fld2027] = b.[_Fld2027])
left join [dbo].[_InfoRg1840] c on (a.[_Fld2032] = c.[_Fld2032])

отрабатывает на ура

смотри что ты с чем там соединяешь