Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 20.04.2009, 09:23   #1
Люсьен
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 12
Репутация: 10
Восклицание sql запрос на выборку записей из двух связанных таблиц

Мне нужно сделать обычный sql запрос на выборку записей из двух связанных таблиц, когда я пишу:

SELECT *
FROM F1 INNER JOIN F2 ON F1.KK = F2.KK;

все отлично, все данные выводятся, но как только пишу

SELECT F2.FIO, F1.NK
FROM F1 INNER JOIN F2 ON F1.KK = F2.KK;

выводит ошибку...
В Accesse проверила, все идет, в чем может быть проблема?
Люсьен вне форума   Ответить с цитированием
Старый 20.04.2009, 10:34   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,334
Репутация: 5274
По умолчанию

Вы забыли написать, какая у Вас СУБД...
запрос у Вас, имхо, нормальный...
ну, раз не работает inner join,
тогда попробуйте его заменить с указанием связи в WHERE:
Код:

SELECT F2.FIO, F1.NK
FROM F1, F2 WHERE  F1.KK = F2.KK;

я надеюсь, что Вы не описались:
у вас в таблице F2 есть поле FIO,
а в таблице F1 есть поле NK

Последний раз редактировалось Serge_Bliznykov; 20.04.2009 в 10:36.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 20.04.2009, 11:59   #3
Люсьен
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 12
Репутация: 10
По умолчанию

СУБД Paradox, на форме Query DBGrid, DataSourse
Пробовола по всякому, не идет...
Можно ли использовать не квери, а тэйбл и написать запрос не на Enter SQL а программно?
Еще вопрос такой: можно ли в запросе использовать вычисляемые поля?
Люсьен вне форума   Ответить с цитированием
Старый 20.04.2009, 12:04   #4
Люсьен
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 12
Репутация: 10
По умолчанию

Причем, пишу я вот такой запрос на вкладке Enter SQL
SELECT NK, FIO
FROM F1,F2
WHERE F1.KK = F2.KK
и он идет!!

Пишу программно и он выдает ошибку и предлагает использовать следующий столбец и так, пока я все чтолбцы не включу
with Form6.Query1 do begin
close;
SQl.Clear;
SQL.Add('SELECT NK, FIO FROM F1,F2 WHERE F1.KK = F2.KK');
Open;
end;
Люсьен вне форума   Ответить с цитированием
Старый 20.04.2009, 13:22   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,334
Репутация: 5274
По умолчанию

Цитата:
Пишу программно и он выдает ошибку и предлагает использовать следующий столбец и так, пока я все чтолбцы не включу
Имхо, проблема у Вас не в запросе!

А попробуйте очистить Ваш QUERY1 !
для начала двойной щелчок по Вашему QUERY1 - откроется редактор полей.
Если там есть хоть одно поле в списке - выделите всё и удалите! (по правой кнопке мышки).
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 20.04.2009, 14:03   #6
Люсьен
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 12
Репутация: 10
По умолчанию

Отлично, спасибо!!
Теперь появляется новый вопрос:
Как же быть с вычисляемыми полями??
Тоже в запросе их сделать??
Мне нужно з поля дополнительных, которых нет в бд, но нужно их вывести в запросе
1. Средний балл по сданным экзаменам
2. Разница баллов между средним баллом у каждого человека и проходным баллом по специальности
3. Зачисление (да, нет) если разница баллов >=0
Люсьен вне форума   Ответить с цитированием
Старый 20.04.2009, 14:52   #7
soleil@mmc
SQL-коддинг
Профессионал
 
Регистрация: 16.01.2009
Сообщений: 1,192
Репутация: 601
По умолчанию

вполне можно и одним запросом

З.Ы.: приведите структуру таблиц
soleil@mmc вне форума   Ответить с цитированием
Старый 20.04.2009, 14:58   #8
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,334
Репутация: 5274
По умолчанию

Люсь, ну как и для любой задачи, тут множество разных путей решения.
Самые простые:
вариант 1.
если позволят задача, реализация SQL в Вашей СУБД (в данном случае Paradox'е) и Ваши познания SQL - то лучше всего получить нужны данные запросом.
типа так:
Код:

  SELECT Student.ID, AVG(Marks) FROM ... GROUP BY Student.ID

Вариант 2. Добавьте все необходимые (выбираемые из БД и вычисляемые) поля в FieldEditor
потом, на OnCalcField проводите вычисления...

есть и другие способы. но, имхо, эти два самые подходящие...

p.s. Здесь на форуме правило: "Один вопрос — одна тема!" поэтому для нового вопроса лучше создать новую тему. и не забудьте дать этой новой теме осмысленное название, как того требуют правила.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 20.04.2009, 15:52   #9
Люсьен
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 12
Репутация: 10
По умолчанию

Еще немножко Вас подостаю
Есть у меня две таблицы:
F1 с полями
KK-код специальности
NK-Название специальности
...
F2 таблица
ID
KK-код специальности (отношение 1 ко многим)
FIO
MATEM-балл по математике
RUS-балл по русскому
INF-балл по информатике

Мне нужны поля вычисляемые:
SB-средний балл(Сумма баллов/3)
RB-разница баллов
Zach-зачисление(логич)(если ср.балл>проходного)
Как мне эти поля заполнить запросом?
Помогите, пожалуста...
Люсьен вне форума   Ответить с цитированием
Старый 20.04.2009, 16:07   #10
soleil@mmc
SQL-коддинг
Профессионал
 
Регистрация: 16.01.2009
Сообщений: 1,192
Репутация: 601
По умолчанию

не понятно откуда берется проходной балл, видимо, из f1
но выглядеть будет где-то так

Код:

select
  f2.fio,
  round((f2.matem+f2.rus+f2.inf)/3, 1) SB,
  round((f2.matem+f2.rus+f2.inf)/3, 1) - f1.passed_ball RB,
  case   
  when (round((f2.matem+f2.rus+f2.inf)/3, 1) - f1.passed_ball)>=0 then 1
  else 0
  end zach
from 
  f2, 
  f1
where 0=0
  and f2.kk = f1.kk

soleil@mmc вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку из нескольких таблиц bullvinkle Microsoft Office Access 9 11.04.2012 04:35
SQL запрос - показать только N последних записей SERG1980 БД в Delphi 8 28.03.2009 14:22
SQL запрос из двух таблиц.(сложный) Miha87 БД в Delphi 5 10.11.2008 12:04
Выорка данных Select из двух связанных таблиц... hijke БД в Delphi 0 28.10.2008 09:24
Как оптимизировать запрос MySQL с выборкой из двух таблиц. Johnatan SQL, базы данных 6 13.04.2008 03:10


09:57.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru