![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL Запрос [D7, access]
SPIRIT © (2004-02-04 10:29:00)
Допустим есть таблица "сотрудники" (ID,fio,id_prof )
"профессии" (id, id_bloka, id_otdela)
У професии по любому существует блок а вот id_otdela может быть и null
"Блоки" (id,name)
"Отделы"(id,name)
нужно чтобы выбирались все записи в том числе и с пустым полем id_otdela
т.е. вот такой запрос не канает
select *
from table_sotr s,table_prof p,table_blok b,table_otdel o
where s.id_prof=p.kod,p.kod_bloka=b.kod,p.kod_otdela=o.kod
SPIRIT (2004-02-04 14:39:00) [1]
у ACCESS, видать, свои стандарты.
Я тоже голову ломал сидел, а потом взял конструктором в акцесе создал запрос и посмотрел чё он там намутил ...
Johnmen (2004-02-04 14:33:00) [2]
Вообще-то говоря, без всяких скобок запрос полностью соотвествует стандарту...
SPIRIT (2004-02-04 14:20:00) [3]
все... дошло наконец-то
with query do
begin
active:=false;
sql.Clear;
sql.Add("select *");
sql.Add("from (((table_sotr s");
sql.Add("inner join table_prof p on p.kod = s.kod_prof )");
sql.Add("inner join table_blok b on b.kod = p.kod_bloka )");
sql.Add("left outer join table_otdel o on o.kod=p.kod_otdela )");
active:=true;
end;
dbgrid5.DataSource:=DS_query;
Johnmen (2004-02-04 14:19:00) [4]
Давай так. После каждой правки текста запроса ты приводишь (если есть указанная ошибка) свой реальный код, как в [18].
SPIRIT (2004-02-04 14:02:00) [5]
ну сообщение выдает об ошиьке там написано: ошибка синтаксиса (пропущен оператор)в выражении запроса "p.kod = s.kod_prof
inner join table_blok b on b.kod = p.kod_bloka
left outer join table_otdel o on o.kod = p.kod_otdela ""
Johnmen (2004-02-04 13:56:00) [6]
>SPIRIT © (04.02.04 13:52)
Не понял...
SPIRIT (2004-02-04 13:52:00) [7]
тоже самое причем ругаться начинает с p.kod=s.kod_prof
inner join table_blok и до конца
Johnmen (2004-02-04 13:23:00) [8]
Попробуй добавить пробел перед концевой " в каждой строке...
SPIRIT (2004-02-04 13:11:00) [9]
with query do
begin
active:=false;
sql.Clear;
sql.Add("select *");
sql.Add("from table_sotr s");
sql.Add("inner join table_prof p on p.kod = s.kod_prof");
sql.Add("inner join table_blok b on b.kod = p.kod_bloka");
sql.Add("left outer join table_otdel o on o.kod=p.kod_otdela");
active:=true;
end;
dbgrid5.DataSource:=DS_query;
Johnmen (2004-02-04 13:04:00) [10]
Приводи код полностью...
SPIRIT (2004-02-04 12:36:00) [11]
когда ADOQuery.active:=true вот так вот и пишет
Johnmen (2004-02-04 12:32:00) [12]
>пишет: Пропущен оператор
Прям так и пишет ? И кто пишет ? И в какой момент ?
Sandman25 (2004-02-04 12:27:00) [13]
Значит, в Access другой синтаксис SQL. Изучайте его help.
SPIRIT (2004-02-04 12:25:00) [14]
> Sandman25 © (04.02.04 12:20) [12]
да
Sandman25 (2004-02-04 12:20:00) [15]
SELECT S.*
FROM TABLE_SOTR S
JOIN TABLE_PROF P ON P.ID = S.ID_PROF
JOIN TABLE_BLOK B ON B.ID = P.ID_BLOKA
LEFT JOIN TABLE_OTDEL O ON O.ID = P.ID_OTDELA
А так? То же самое?
SPIRIT (2004-02-04 12:15:00) [16]
> asp © (04.02.04 10:34) [1]
> Путаница выходит ID & KOD.
торопился, ID это и есть КОД ...
> А запрос:
> SELECT *
> FROM TABLE_SOTR S
> INNER JOIN TABLE_PROF P ON (P.ID = S.ID_PROF)
> INNER JOIN TABLE_BLOK B ON (B.ID = P.ID_BLOKA)
> LEFT OUTER JOIN TABLE_OTDEL O ON (O.ID = P.ID_OTDELA)
пишет: Пропущен оператор
Sandman25 (2004-02-04 12:14:00) [17]
[9] SPIRIT © (04.02.04 12:13)
Неужели не понимаете, что нам нужно знать сообщение об ошибке???
SPIRIT (2004-02-04 12:13:00) [18]
Запрост то не работает :(
Sandman25 (2004-02-04 12:02:00) [19]
Рекомендация с большой буквы относится и к идентификаторам из одной буквы :)
Johnmen (2004-02-04 12:00:00) [20]
Отностительно i или I - это "дополнен некоторыми правилами, созданными на основе собственного опыта разработки."
В оригинале таких рек-ий нет. Но есть рек-ия с большой буквы.