Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

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 ''%&#209;&#211;&#196;%'' or Orgs.OrgName like ''%&#207;&#208;&#206;&#202;&#211;&#208;&#192;&#210;%'')');
dm.qrTemp1.SQL.Add('and Arrest.RegOrgan not in (select Orgs.OrgID from Orgs where Orgs.OrgName like ''%&#209;&#211;&#196;%'' or Orgs.OrgName like ''%&#207;&#208;&#206;&#202;&#211;&#208;&#192;&#210;%'')');

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+'&#209;&#207;&#200;&#209;&#206;&#202;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

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

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 » Программирование баз данных (БД) модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.04 сек.