| 
| 
 | Вопрос # 5 523/ вопрос открыт / | 
 |  Здравствуйте! Помогите пожалуйста c SQL-запросомADO
 Из табл. Arrest два поля RegOrgan и OrgID оба тип (чис), связаны
 с табл. Orgs полем OrgID
 
 в моем запросе в выражение From ошибка <не поддерживвается выражение объединения> пробовал и Inner Join не получилось помогите
 
 dm.qrTemp1.SQL.Add('FROM (Arrest left outer JOIN Orgs ON Arrest.RegOrgan = Orgs.OrgID) left outer JOIN Orgs ON Arrest.OrgId = Orgs.OrgID');
 
|  |   Вопрос задал: senyor (статус: Посетитель)Вопрос отправлен: 25 июля 2011, 08:37
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: corban Здравствуйте, senyor!а зачем два раза делать JOIN?
 JOIN присоединяет одну таблицу к другой по какому-то условию, а у тебя получилось дублирование запроса на присоединение. Попробуй так:
 dm.qrTemp1.SQL.Add('FROM Arrest RIGHT outer JOIN Orgs ON Arrest.RegOrgan = Orgs.OrgID');
 должна выбраться вся таблица Arrest и к ней присоединиться записи таблицы Orgs, где выполняется условие Arrest.RegOrgan = Orgs.OrgID
 
|  | Ответ отправил: corban (статус: 2-ой класс)Время отправки: 25 июля 2011, 09:05
 
 |  
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 25 июля 2011, 18:23; участников в обсуждении: 4. 
|   | Тов. Женька (статус: 3-ий класс), 25 июля 2011, 08:53 [#1]:А что хотите в итоге получить? Приведите вашу СУБД и запрос полностью. |  
|   | senyor (статус: Посетитель), 25 июля 2011, 09:02 [#2]:procedure TSpisokRepForm.BtnWordClick(Sender: TObject); var
 s, s1, srs : string;
 wordDoc, WTable, Repl, seli, TmpRange: OleVariant;
 d,d1,m,m1,y,y1,i, srd,srm,sry : word;
 //d1, d2: TDateTime;
 begin
 
 DecodeDate(DateTimePicker1.Date,y,m,d);
 s:=IntToStr(m)+'/'+IntToStr(d)+'/'+IntToStr(y);
 s := '#' + s + '# ';
 DecodeDate(DateTimePicker2.Date,y1,m1,d1);
 s1:=IntToStr(m1)+'/'+IntToStr(d1)+'/'+IntToStr(y1);
 s1 := '#' + s1 + '# ';
 if ListBox1.Selected[0] then
 begin
 dm.qrTemp1.SQL.Clear;
 dm.qrTemp1.SQL.Add('SELECT Arrest.*, Orgs.*');
 
 dm.qrTemp1.SQL.Add('FROM (Arrest left outer JOIN Orgs ON Arrest.RegOrgan = Orgs.OrgID) left outer JOIN Orgs ON Arrest.OrgId = Orgs.OrgID');
 
 dm.qrTemp1.SQL.Add('WHERE Arrest.SrokDate <= '+s+'  and (Orgs.OrgName like ''%ÑÓÄ%'' or Orgs.OrgName like ''%ÏÐÎÊÓÐÀÒ%'')');
 dm.qrTemp1.SQL.Add('and Arrest.RegOrgan not in (select Orgs.OrgID from Orgs where Orgs.OrgName like ''%ÑÓÄ%'' or Orgs.OrgName like ''%ÏÐÎÊÓÐÀÒ%'')');
 
 dm.qrTemp1.SQL.Add(' and not arrestID in (select ArrestID from Os where ArrestID=Arrest.ArrestID)');
 dm.qrTemp1.SQL.Add(' and not arrestID in (select ArrestID from Dead where ArrestID=Arrest.ArrestID)');
 dm.qrTemp1.SQL.Add(' and not arrestID in (select ArrestID from Transit where ArrestID=Arrest.ArrestID)');
 
 dm.qrTemp1.SQL.Add(' and not arrestID in (select ArrestID from Profit where (ArrestID=Arrest.ArrestID)');
 dm.qrTemp1.SQL.Add('   and (Depart_Date is not Null or (Arriv_Date is  Null ))');
 dm.qrTemp1.SQL.Add('   and (Depart_Date is  Null or (Arriv_Date is  Null)))');
 
 dm.qrTemp1.SQL.Add(' and not arrestID in (select ArrestID from Profit0 where ArrestID=Arrest.ArrestID)');
 dm.qrTemp1.SQL.Add(' and not arrestID in (select ArrestID from ArFree where ArrestID=Arrest.ArrestID)');
 dm.qrTemp1.SQL.Add('Order By Arrest.RegOrgan, Arrest.Card_fam');
 dm.qrTemp1.Open;
 i:=2;
 wordDoc:=dm.ShablonPath+'ÑÏÈÑÎÊ45.dot';
 //ShowMessage(wordDoc);
 WordApplication1.Documents.Add(wordDoc,EmptyParam,EmptyParam,EmptyParam);
 WTable:=WordApplication1.ActiveDocument.Tables.Item(1);
 //WordApplication1.Visible:=True;
 Repl := wdReplaceAll;
 WordApplication1.Selection.Find.Forward := true;
 WordApplication1.Selection.Find.Text := '[p]';
 WordApplication1.Selection.Find.Replacement.Text := DateToStr(DateTimePicker1.Date);
 WordApplication1.Selection.Find.Execute(EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, Repl, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
 
 While not dm.qrTemp1.Eof do
 begin
 WTable.Cell(i,1).Range.Text:=IntToStr(i-1);
 WTable.Cell(i,2).Range.Text:=dm.qrTemp1.FieldByName('Card_fam').AsString+' '+dm.qrTemp1.FieldByName('Card_imy').AsString+' '+dm.qrTemp1.FieldByName('Card_otch').AsString;
 WTable.Cell(i,3).Range.Text:=dm.qrTemp1.FieldByName('BirthDay').AsString;
 WTable.Cell(i,4).Range.Text:=dm.qrTemp1.FieldByName('ArrestDate_fact').AsString;
 WTable.Cell(i,5).Range.Text:=dm.qrTemp1.FieldByName('OrgID').AsString;
 WTable.Cell(i,6).Range.Text:=dm.qrTemp1.FieldByName('ClauseUK').AsString;
 WTable.Cell(i,7).Range.Text:=dm.qrTemp1.FieldByName('Inspector').AsString;
 WTable.Cell(i,8).Range.Text:=dm.qrTemp1.FieldByName('SrokDate').AsString;
 WTable.Cell(i,9).Range.Text:=dm.qrTemp1.FieldByName('RegOrgan').AsString;
 WTable.Rows.Add;
 dm.qrTemp1.Next;
 i:=i+1;
 end;
 WordApplication1.Visible:=True;
 end;
 |  
|   | senyor (статус: Посетитель), 25 июля 2011, 09:13 [#3]:FROM (Arrest right outer JOIN Orgs ON Arrest.RegOrgan = Orgs.OrgID) left outer JOIN Orgs ON Arrest.OrgId = Orgs.OrgID пробовал и так не получается пишет что не поддерживаются условия объединения
 |  
|   | Тов. Женька (статус: 3-ий класс), 25 июля 2011, 09:29 [#4]:Так? 
 SELECT 
    ARREST.*,
    ORGS.*,
    ORGS1.*
FROM ORGS ORGS1
   INNER JOIN ARREST ON (ORGS1.ORGID = ARREST.ORGID)
   INNER JOIN ORGS ON (ARREST.REGORGAN = ORGS.ORGID) |  
|   | corban (статус: 2-ой класс), 25 июля 2011, 09:42 [#5]:не так: FROM (Arrest right outer JOIN Orgs ON Arrest.RegOrgan = Orgs.OrgID) left outer JOIN Orgs ON Arrest.OrgId = Orgs.OrgID а так:FROM Arrest right outer JOIN Orgs ON Arrest.RegOrgan = Orgs.OrgID ,если у тебя в поле Arrest.RegOrgan хранятся значения поля Orgs.OrgID. Ежели в значения Orgs.OrgID хранятся в Arrest.OrgId, тогда так:
 FROM Arrest right outer JOIN Orgs ON Arrest.OrgId = Orgs.OrgID
 |  
|   | Мережников Андрей (статус: Абитуриент), 25 июля 2011, 18:23 [#6]: Цитата (senyor): Из табл. Arrest два поля RegOrgan и OrgID оба тип (чис), связаны с табл. Orgs полем OrgID поля не могут быть связаны - связаны могут быть связаны строки
 |  27 июля 2011, 10:25: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Программирование баз данных (БД) модератором Ерёмин А.А. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |