imfrozen 0 / 0 / 1 Регистрация: 14.05.2012 Сообщений: 55 |
||||
1 |
||||
11.06.2016, 18:34. Показов 6794. Ответов 2 Метки нет (Все метки)
Добрый день.Пытаюсь сделать запрос на соединение таблиц,но получаю ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘nazv_otpFROM privoz_gruz INNER JOIN korabli ON privoz_gruz.id_ship = korabli.id_shipINNER JOIN port_otp ON privoz_gruz.port_otp = port_otp.id_port_otpr’.
Думаю что проблема в расставлении скобок.Подскажите пожалуйста
0 |
ltv_1953 17250 / 7091 / 1595 Регистрация: 21.06.2012 Сообщений: 13,335 |
||||
12.06.2016, 08:07 |
2 |
|||
Сообщение было отмечено imfrozen как решение РешениеЕсли это Аксесс (согласно теме, а не разделу). то FROM примерно так (в приведенном запросе и скобок не хватает, и в конце какая-то каша …)
1 |
0 / 0 / 1 Регистрация: 14.05.2012 Сообщений: 55 |
|
12.06.2016, 09:17 [ТС] |
3 |
действительно, промахнулся с разделом, извиняюсь
0 |
Syntax Error (missing Operator) in query expression ‘tbl_employee.emp_id = tbl_netpay.emp_id INNER JOIN tbl_gross ON tbl_employee.emp_id = tbl_gross.emp_ID INNER JOIN tbl_tax ON tbl_employee.emp_id — tbl_tax.emp_ID’.
SELECT tbl_employee.emp_ID,
tbl_employee.emp_name,
tbl_gross.BasicSalary,
tbl_gross.totalOT,
tbl_netpay.totalGross,
tbl_tax.totalLate,
tbl_tax.allowance,
tbl_tax.SSS,
tbl_tax.PhilHealth,
tbl_tax.GSIS,
tbl_tax.HDMF,
tbl_netpay.totalDeduc,
tbl_netpay.emp_ti,
tbl_netpay.emp_wt,
tbl_netpay.emp_np
FROM tbl_employee
INNER JOIN tbl_netpay ON tbl_employee.emp_id = tbl_netpay.emp_id
INNER JOIN tbl_gross ON tbl_employee.emp_id = tbl_gross.emp_ID
INNER JOIN tbl_tax ON tbl_employee.emp_id = tbl_tax.emp_ID;
I always get the error above.
imfrozen 0 / 0 / 1 Регистрация: 14.05.2012 Сообщений: 55 |
||||
1 |
||||
11.06.2016, 18:34. Показов 6159. Ответов 2 Метки нет (Все метки)
Добрый день.Пытаюсь сделать запрос на соединение таблиц,но получаю ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘nazv_otpFROM privoz_gruz INNER JOIN korabli ON privoz_gruz.id_ship = korabli.id_shipINNER JOIN port_otp ON privoz_gruz.port_otp = port_otp.id_port_otpr’.
Думаю что проблема в расставлении скобок.Подскажите пожалуйста
__________________ 0 |
ltv_1953 16778 / 6959 / 1548 Регистрация: 21.06.2012 Сообщений: 12,975 |
||||
12.06.2016, 08:07 |
2 |
|||
Сообщение было отмечено imfrozen как решение РешениеЕсли это Аксесс (согласно теме, а не разделу). то FROM примерно так (в приведенном запросе и скобок не хватает, и в конце какая-то каша …)
1 |
0 / 0 / 1 Регистрация: 14.05.2012 Сообщений: 55 |
|
12.06.2016, 09:17 [ТС] |
3 |
действительно, промахнулся с разделом, извиняюсь 0 |
|
|
|
INNER JOIN объединение 3 таблиц
, MS Access/ADO
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Junior Рейтинг (т): 1 |
Написал запрос, объединяющий 3 таблицы INNER JOIN’ом
ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’); ADOQuery1.SQL.Add(‘from BolList as BL ‘); ADOQuery1.SQL.Add(‘INNER JOIN Doctor as D ON BL.doctor=D.key ‘); ADOQuery1.SQL.Add(‘INNER JOIN MKB ON BL.mkb=mkb.code ‘); ADOQuery1.SQL.Add(‘where PolStac=»‘+PolStac+’»‘); ADOQuery1.SQL.Add(‘and Date>=:d1 and Date<=:d2’); ADOQuery1.Parameters.ParamByName (‘d1’).Value:=DateEdit1.Date; ADOQuery1.Parameters.ParamByName (‘d2’).Value:=DateEdit2.Date; ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’); ADOQuery1.Active:=true;
выдает ошибку: Ошибка синтаксиса(пропущен оператор) в выражении запроса BL.doctor=D.key INNER JOIN MKB ON BL.mkb=mkb.code Может Access не дает объединять больше 2х таблиц? Добавлено 31.10.12, 12:13
ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’); ADOQuery1.SQL.Add(‘from BolList as BL,Doctor as D,MKB’); ADOQuery1.SQL.Add(‘where BL.doctor=D.key and BL.mkb=mkb.code and BL.mkb=mkb.code’); ADOQuery1.SQL.Add(‘and PolStac=»‘+PolStac+’»‘); ADOQuery1.SQL.Add(‘and Date>=:d1 and Date<=:d2’); ADOQuery1.Parameters.ParamByName (‘d1’).Value:=DateEdit1.Date; ADOQuery1.Parameters.ParamByName (‘d2’).Value:=DateEdit2.Date; ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’); ADOQuery1.Active:=true; Но вопрос про INNER JOIN не снимается, почему в данном случае не работает он? |
Gonarh |
|
ADOQuery1.SQL.BeginUpdate; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’); … ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’); ADOQuery1.SQL.EndUpdate; … |
sansans |
|
Почему бы не использовать неплохой конструктор запросов самого Аксесса, чтобы посмотреть как на самом деле текст запроса должен выглядеть. |
int 21h |
|
Junior Рейтинг (т): 1 |
2 sansans, спасибо помогло. Оказывается в синтаксисе Access INNER JOIN берется в скобки
SELECT * FROM (BolList INNER JOIN doctor ON BolList.Doctor = doctor.key) INNER JOIN mkb ON BolList.mkb = mkb.CODE; |
Fr0sT |
|
Хоть трабл был и не в этом, но кто ж добавляет кусок запроса после присваивания параметров |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Базы данных
- Следующая тема
[ Script execution time: 0,1050 ] [ 16 queries used ] [ Generated: 30.01.23, 16:30 GMT ]
dsultan
14.04.08 — 16:48
подключаюсь к dbf через microsoft.jet
запутался в joinах, вот что выдает
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘ttl.ACCID = accs.ID INNER JOIN 1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD’.
если убрать второй джойн — не ругается
где собака?
SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,
iif(ttl.VSC0 = ‘ EL’,ttl.SC0,iif(ttl.VSC1 = ‘ EL’,ttl.SC1,
iif(ttl.VSC2 = ‘ EL’,ttl.SC2,0))) AS sk1, iif(KIND = ‘1’,ttl.SD
,0) AS sumost, iif(KIND = ‘2’,ttl.SD,0) AS valsumost,
iif(KIND = ‘3’,ttl.SD,0) AS kolost
FROM 1SBKTTL AS ttl
INNER JOIN
1SACCS AS accs ON ttl.ACCID = accs.ID
INNER JOIN
1SACCS AS accs2 ON accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD
AND accs.PLANID = 809 AND accs2.ID = ‘ 1V ‘
WHERE (ttl.date = #1/1/2008#) AND (ttl.KIND IN (‘1’, ‘2’, ‘3’)) AND (‘ EL’ IN (ttl.VSC0,
ttl.VSC1, ttl.VSC2))
sapphire
1 — 14.04.08 — 16:54
Попробуй, если ты используешь INNER JOIN
использовать select … from {перечень таблиц} where {условие выборки} AND {условия соединений}
sapphire
2 — 14.04.08 — 16:56
SELECT ttl.ACCID AS schet, ttl.CURRID AS valut,
iif(ttl.VSC0 = ‘ EL’,ttl.SC0,iif(ttl.VSC1 = ‘ EL’,ttl.SC1,
iif(ttl.VSC2 = ‘ EL’,ttl.SC2,0))) AS sk1, iif(KIND = ‘1’,ttl.SD
,0) AS sumost, iif(KIND = ‘2’,ttl.SD,0) AS valsumost,
iif(KIND = ‘3’,ttl.SD,0) AS kolost
FROM 1SBKTTL AS ttl, 1SACCS AS accs, 1SACCS AS accs2
WHERE
((ttl.date = #1/1/2008#) AND (ttl.KIND IN (‘1’, ‘2’, ‘3’)) AND (‘ EL’ IN (ttl.VSC0,
ttl.VSC1, ttl.VSC2)))
AND
(
accs ON ttl.ACCID = accs.ID AND accs.SCHKOD >= accs2.SCHKOD AND LEFT(accs.SCHKOD,LEN(accs2.SCHKOD)) = accs2.SCHKOD
AND accs.PLANID = 809 AND accs2.ID = ‘ 1V ‘
)
dsultan
3 — 14.04.08 — 17:21
(2) пустоту вернул
sapphire
4 — 14.04.08 — 17:31
(3) Если положение dbf-ок статично, можно создать mdbшник и прилепить к нему через связь с таблицами запрос внутри. Так делают, когда хотят уйти от ограничений ядра jet
dsultan
5 — 14.04.08 — 17:35
все ок, спасибо, при копипасте пробелы в ‘ 1v ‘ потерялись, и еще заодно узнал, что planID в dbf лежит 36ричный, а в sql версии десятичный
sapphire
6 — 14.04.08 — 17:36
(5)
dsultan
7 — 14.04.08 — 17:37
(4) я так и делаю для дебага, удобно в акцесе проверять
одно смущает — тот же самый запрос через тот же джет акцес выдает результат мгновенно, а прога отбирает что то долго
sapphire
8 — 14.04.08 — 17:37
+(4) Иногда лучше использовать драйвер FoxPro (см документацию к 1С++),
или через Access. Кстати, частенько Accessовские БД используют для диагностики.
sapphire
9 — 14.04.08 — 17:38
(7) Правильно, потому что ты не используешь индексы.
dsultan
10 — 14.04.08 — 17:39
(8) я и начал с фокспрошного драйвера, уперся в форматы дат, устал бодаться, решил джет попробовать
dsultan
11 — 14.04.08 — 17:41
а их можно через джет использовать?
КонецЦикла
12 — 14.04.08 — 17:47
(10) Юзай ОлеДБ, 1С++ и поиск
Хватит долбить
КонецЦикла
13 — 14.04.08 — 17:48
Кроме того уже есть аккаунтрекордсет
dsultan
14 — 14.04.08 — 18:07
(12)а чем джет не оледб?
делал уже через 1с++, быстрые итоги, все супер, только оказалось, что с dbf они не работают
самому переписывать быстрые итоги под dbf что то влом
спрофайлил то, что они запрашивают, пытаюсь приладить
(13) это к чему?
Форум программистов Vingrad
2 Join-а в Query, не проходит запрос в IDE |
Опции темы |
eXcoder | |||
Новичок Профиль Репутация: нет |
День добрый. Работаю через ADO с DBF’ами. Пишу в ADOQuery.SQL :
в SQL Suery Analyzer от SQL SERVER 2000 IDE говорит, что: Как выйти из ситуации? Это сообщение отредактировал(а) eXcoder — 1.3.2006, 06:04 |
||
SergeBS | |
Эксперт Профиль
Репутация: 11 |
Апострофы посмотри — в Delphi надо удваивать, т.е. В IDE: s := ‘select * where a = »blabla-bla» and b = 1’; |
CaNIBaLchik | |
Новичок Профиль
Репутация: нет |
join -ы они вообще раздувают кортежы, любои join можно заменить and — ом |
eXcoder | |||
Новичок Профиль Репутация: нет |
Можешь показать на моем запросе как вместо JOIN юзать AND ? |
||
SergeBS | |||
Эксперт Профиль
Репутация: 11 |
CaNIBaLchik,
Шутник. eXcoder, |
||
ТоляМБА | |||||
Котэ Профиль
Репутация: 3 |
Была у меня похожая проблема – 3 таблицы и два джоина. Не знаю поможет в твоем случае или нет, но всё же. Liter, LiterLang, Landg Надеюсь так структура понятна. Был запрос:
Прокатывал на ура. Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘LiterLang.LiterID = Liter.LiterID INNER JOIN Мои действия:
Цепляю его, ложу в ADOQuery1. Открываю – всё работает. |
||||
Vit | |
Vitaly Nevzorov Профиль
Репутация: 14 |
Заменить двойные кавычки на одинарные, но удвоенные ——————— With the best wishes, Vit |
Правила форума «Delphi: Базы данных и репортинг» | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
Вопрос:
Я выполняю задание на класс, и я нахожусь на своем конце. В принципе, мне нужно написать запрос, который использует INNER JOIN
для объединения всех данных в 4 таблицы, избегая при этом заголовков с одинаковыми именами (Ie Table1.Master_Number
и Table2.Master_Number
). Литературные инструкции заключаются в следующем:
Шаг 1. Создайте представление обо всех столбцах (только один раз столбцы столбцов, если столбцы дублируются в таблицах) во всех таблицах базы данных лекций 5. Сохраните этот запрос как Lecture_5_View и нам этот запрос, чтобы построить следующие 3 запроса. В предложении “FROM” вы должны использовать “INNER JOIN” в этом запросе. Помните, что ACCESS не поддерживает команду “CREATE VIEW”, поэтому вы должны создать запрос выбора. ‘
Вот скриншот базы данных, в которой показаны все заголовки и заголовки столбцов.
Основываясь на других сообщениях, подобных этому, я подумал, что это будет довольно просто. У меня это до сих пор, но он не хочет запускать
(т.е. ошибка синтаксиса (отсутствующий оператор) в выражении запроса “Таблица1.Master_Number = Таблица2.Master_Number INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number)
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.Master_Number = Table2.Master_Number
INNER JOIN Table4 ON Table1.Master_Number = Table4.Master_Number
Где я буду ошибаться до сих пор и как выполнить этот запрос?
Большое спасибо, Джош
Лучший ответ:
При использовании Access вам необходимо использовать круглые скобки при выполнении нескольких соединений:
SELECT *
FROM (Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number)
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number;
Это очень важно, если вы разделите свой запрос так, чтобы у вас было не более одного соединения в каждом разделе, т.е. Ваш первый запрос:
SELECT *
FROM Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number;
Тогда у вас есть:
SELECT *
FROM YourFirstQuery
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number;
Это немного отличается от подзапросов, поскольку вы все еще можете ссылаться на все поля из Таблицы 1 и Таблицы2.
РЕДАКТИРОВАТЬ
Чтобы избежать дублирования столбцов, вам нужно явно указать нужные столбцы (хотя вы все равно должны это делать):
SELECT Table1.Master_Number,
Table1.Asset_Tag,
Table1.Serial_Number,
Table2.Last_Name,
Table2.First_Name,
Table4.Office_Number,
Table4.Location,
Table4.Department
FROM (Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number)
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number;
Ответ №1
Попробуй это:
SELECT * FROM ((Table1
INNER JOIN Table2
ON Table1.Master_Number = Table2.Master_Number)
INNER JOIN Table4
ON Table1.Master_Number = Table4.Master_Number)
Загрузка…
|
|
|
INNER JOIN объединение 3 таблиц
, MS Access/ADO
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Junior Рейтинг (т): 1 |
Написал запрос, объединяющий 3 таблицы INNER JOIN’ом
ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’); ADOQuery1.SQL.Add(‘from BolList as BL ‘); ADOQuery1.SQL.Add(‘INNER JOIN Doctor as D ON BL.doctor=D.key ‘); ADOQuery1.SQL.Add(‘INNER JOIN MKB ON BL.mkb=mkb.code ‘); ADOQuery1.SQL.Add(‘where PolStac=»‘+PolStac+'»‘); ADOQuery1.SQL.Add(‘and Date>=:d1 and Date<=:d2’); ADOQuery1.Parameters.ParamByName (‘d1’).Value:=DateEdit1.Date; ADOQuery1.Parameters.ParamByName (‘d2’).Value:=DateEdit2.Date; ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’); ADOQuery1.Active:=true;
выдает ошибку: Ошибка синтаксиса(пропущен оператор) в выражении запроса BL.doctor=D.key INNER JOIN MKB ON BL.mkb=mkb.code Может Access не дает объединять больше 2х таблиц? Добавлено 31.10.12, 12:13
ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’); ADOQuery1.SQL.Add(‘from BolList as BL,Doctor as D,MKB’); ADOQuery1.SQL.Add(‘where BL.doctor=D.key and BL.mkb=mkb.code and BL.mkb=mkb.code’); ADOQuery1.SQL.Add(‘and PolStac=»‘+PolStac+'»‘); ADOQuery1.SQL.Add(‘and Date>=:d1 and Date<=:d2’); ADOQuery1.Parameters.ParamByName (‘d1’).Value:=DateEdit1.Date; ADOQuery1.Parameters.ParamByName (‘d2’).Value:=DateEdit2.Date; ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’); ADOQuery1.Active:=true; Но вопрос про INNER JOIN не снимается, почему в данном случае не работает он? |
Gonarh |
|
ADOQuery1.SQL.BeginUpdate; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(‘select BL.mkb,MKB.DESCR,SUM(BL.dni) as dni,D.fio,count(*) as kolvo’); … ADOQuery1.SQL.Add(‘GROUP BY BL.mkb,D.fio,MKB.DESCR’); ADOQuery1.SQL.EndUpdate; … |
sansans |
|
Почему бы не использовать неплохой конструктор запросов самого Аксесса, чтобы посмотреть как на самом деле текст запроса должен выглядеть. |
int 21h |
|
Junior Рейтинг (т): 1 |
2 sansans, спасибо помогло. Оказывается в синтаксисе Access INNER JOIN берется в скобки
SELECT * FROM (BolList INNER JOIN doctor ON BolList.Doctor = doctor.key) INNER JOIN mkb ON BolList.mkb = mkb.CODE; |
Fr0sT |
|
Хоть трабл был и не в этом, но кто ж добавляет кусок запроса после присваивания параметров |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Базы данных
- Следующая тема
[ Script execution time: 0,0536 ] [ 16 queries used ] [ Generated: 25.06.23, 08:18 GMT ]