Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите создать запрос по выборке из 3-х таблиц

21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Добрый день!Помогите написать sql запрос по выборке!(дальше работа не продвигается).Благодарю за содействие!!!
Значит есть 3 таблицы с соответствующими полями [COLOR="Blue"]spmat.dbf(shmat,mat,gostmat)[/COLOR] - шифры материалов;[COLOR="#0000ff"]shmat.dbf(shmatpro,shmat,shpro,...)[/COLOR]-шифры материалов и профилей;[COLOR="#0000ff"]sppro.dbf(shpro,profil,razmer,...)[/COLOR]- шифры профилей.
Мне надо выбрать все шифры профилей соответствуещие каждому шифру материала!Т.е. вывести из этих таблиц поля для каждого значения [COLOR="#0000ff"]spmat.shmat[/COLOR] !!!!
8.2K
14 февраля 2008 года
Ora-cool
211 / / 20.09.2007
Цитата: yalovenko_alexandr
Добрый день!Помогите написать sql запрос по выборке!(дальше работа не продвигается).Благодарю за содействие!!!
Значит есть 3 таблицы с соответствующими полями [COLOR="Blue"]spmat.dbf(shmat,mat,gostmat)[/COLOR] - шифры материалов;[COLOR="#0000ff"]shmat.dbf(shmatpro,shmat,shpro,...)[/COLOR]-шифры материалов и профилей;[COLOR="#0000ff"]sppro.dbf(shpro,profil,razmer,...)[/COLOR]- шифры профилей.
Мне надо выбрать все шифры профилей соответствуещие каждому шифру материала!Т.е. вывести из этих таблиц поля для каждого значения [COLOR="#0000ff"]spmat.shmat[/COLOR] !!!!




 
Код:
select * from  spmat, shmat, sppro
  where spmat.shmat = shmat.shmat
    and shmat.shpro = sppro.shpro

?
11
14 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: yalovenko_alexandr
Добрый день!Помогите написать sql запрос по выборке!(дальше работа не продвигается).Благодарю за содействие!!!
Значит есть 3 таблицы с соответствующими полями [COLOR="Blue"]spmat.dbf(shmat,mat,gostmat)[/COLOR] - шифры материалов;[COLOR="#0000ff"]shmat.dbf(shmatpro,shmat,shpro,...)[/COLOR]-шифры материалов и профилей;[COLOR="#0000ff"]sppro.dbf(shpro,profil,razmer,...)[/COLOR]- шифры профилей.
Мне надо выбрать все шифры профилей соответствуещие каждому шифру материала!Т.е. вывести из этих таблиц поля для каждого значения [COLOR="#0000ff"]spmat.shmat[/COLOR] !!!!



INNER JOIN в помощь
или условие WHERE (говорят работает быстрее)
PS: в любой СУБД есть боле-менее нормальный визуальный построитель запросов, кидаешь мышкой туда таблицы, мышкой их соединяешь, и запрос готов

21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Етот вариант не работает,мне кажется необходимо делать с помощью inner join
8.2K
14 февраля 2008 года
Ora-cool
211 / / 20.09.2007
Цитата: yalovenko_alexandr
Етот вариант не работает,мне кажется необходимо делать с помощью inner join



Ну значит через inner join, если вариант с where в вашей СУБД не работает. Смысл тот же самый.

21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
вот я пишу такой запрос,и ничего выдает сука ошибку!!Invalid open mode.Table name "spmat.dbf".Что ето может значить?
select a.shmat,a.mat,a.gostmat,b.shpro,d.profil,d.razmer,d.gostpro
from
"spmat.dbf" a,
"shmat.dbf" b
inner join "sppro.dbf" d on b.shpro=d.shpro
where b.shmat=a.shmat
order by mat
11
14 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: yalovenko_alexandr
вот я пишу такой запрос,и ничего выдает сука ошибку!!Invalid open mode.Table name "spmat.dbf".Что ето может значить?
select a.shmat,a.mat,a.gostmat,b.shpro,d.profil,d.razmer,d.gostpro
from
"spmat.dbf" a,
"shmat.dbf" b
inner join "sppro.dbf" d on b.shpro=d.shpro
where b.shmat=a.shmat
order by mat



where замени на inner join

21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Так?
select a.shmat,a.mat,a.gostmat,b.shpro,d.profil,d.razmer,d.gostpro
from
"spmat.dbf" a,
"shmat.dbf" b
inner join "sppro.dbf" d on b.shpro=d.shpro
inner join "spmat.dbf" c on b.shmat=c.shmat
order by mat
21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Все равно такая же ошибка!
11
14 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
во FROM указал только 2 таблицы, а в INNER JOIN соединяешь 3
21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Вот так?Извени что так задолбал Тебя,но что то не хочет работать и этот вариант
select a.shmat,a.mat,a.gostmat,b.shpro,c.profil,c.razmer,c.gostpro
from
"spmat.dbf" a,
"shmat.dbf" b,
"sppro.dbf" c
inner join "sppro.dbf" d on b.shpro=d.shpro
inner join "spmat.dbf" f on b.shmat=f.shmat
order by mat
21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Вот так?Но тоже не желает работать!Извени что задолбал Тебя,но в чем может быть бок?
select a.shmat,a.mat,a.gostmat,b.shpro,c.profil,c.razmer,c.gostpro
from
"spmat.dbf" a,
"shmat.dbf" b,
"sppro.dbf" c
inner join "sppro.dbf" d on b.shpro=d.shpro
inner join "spmat.dbf" f on b.shmat=f.shmat
order by mat
8.2K
14 февраля 2008 года
Ora-cool
211 / / 20.09.2007
Цитата: yalovenko_alexandr
Вот так?Но тоже не желает работать!Извени что задолбал Тебя,но в чем может быть бок?
select a.shmat,a.mat,a.gostmat,b.shpro,c.profil,c.razmer,c.gostpro
from
"spmat.dbf" a,
"shmat.dbf" b,
"sppro.dbf" c
inner join "sppro.dbf" d on b.shpro=d.shpro
inner join "spmat.dbf" f on b.shmat=f.shmat
order by mat


Нет! Во from указывается 1 таблица, остальные к ней джойнятся.

 
Код:
select ...
from  "spmat.dbf" a
inner join "shmat.dbf" b on ...
inner join "sppro.dbf" c  on ...
order by...
11
14 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
вот что мне нарисовал MS SQL своим дизайнером
 
Код:
SELECT  *
FROM    shmat INNER JOIN
              spmat ON shmat.shmat = spmat.shmat
              INNER JOIN
              sppro ON spmat.shmat = sppro.shpro
21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Цитата: oxotnik333
вот что мне нарисовал MS SQL своим дизайнером
 
Код:
SELECT  *
FROM    shmat INNER JOIN
              spmat ON shmat.shmat = spmat.shmat
              INNER JOIN
              sppro ON spmat.shmat = sppro.shpro



Но как может [COLOR="Blue"]sppro ON spmat.shmat = sppro.shpro[/COLOR]
Это ж разные поля и соответственно разные значения!!!

21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Что не один из вариантов не желает заработать!!!Вот это праздник выдался!!:))
11
14 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: yalovenko_alexandr
Но как может [COLOR="Blue"]sppro ON spmat.shmat = sppro.shpro[/COLOR]
Это ж разные поля и соответственно разные значения!!!



ну у меня же нет этих таблиц с их правильными полями... я накидвл примерно 3 таблицы и объединил их
поменяй названия в объединении и будет щастье.
ЗЫ: СУБД какая?
ЗЫЗЫ: Дай SQL полный на создание всех 3-х таблиц

21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Цитата: oxotnik333
ну у меня же нет этих таблиц с их правильными полями... я накидвл примерно 3 таблицы и объединил их
поменяй названия в объединении и будет щастье.
ЗЫ: СУБД какая?
ЗЫЗЫ: Дай SQL полный на создание всех 3-х таблиц



Значит передо мной задача такая!Есть уже готовые dbf файлы(вышеперечисленные).Мне необходимо на Buildere6 и Interbase реализовать отчет по выборке данных.Может я не корректно поясняю.Я новичок на этом форуме и воще в программировании!!!

8.2K
14 февраля 2008 года
Ora-cool
211 / / 20.09.2007
А как связаны "уже готовые dbf файлы" и Interbase?
11
14 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: yalovenko_alexandr
Значит передо мной задача такая!Есть уже готовые dbf файлы(вышеперечисленные).Мне необходимо на Buildere6 и Interbase реализовать отчет по выборке данных.Может я не корректно поясняю.Я новичок на этом форуме и воще в программировании!!!



в самом Билдере кидаешь на форму TQuery, правой кнопкой мыши по ней SQL Builder открывается редактор SQLя и в нем мышкой работаешь, он тебе сам потом готовый SQL выдаст (поместит его в TQuery::SQL)

21K
14 февраля 2008 года
yalovenko_alexandr
34 / / 13.02.2008
Спасибо большое кто помогал мне разбираться с этой как не странно очень легкой проблемой!Я сумел ее побороть, просто возникали бока с тем, что я создавал индексированную таблицу [COLOR="Blue"]spmat[/COLOR] и выбивало ошибку.А так все работает!!Вот код как ето все происходит:
void __fastcall TMainForm::Button3Click(TObject *Sender)
{
AnsiString zapros;

//Закрытие индексированной таблицы "spmat"
DM->tblSpMat->Close();
//Открытие базы данных
DM->AdsConnection->IsConnected = false;
DM->AdsConnection->ConnectPath = GetCurrentDir()+"\\data\\";
DM->AdsConnection->IsConnected = true;
//Формирование запроса на выборку шифров профилей для каждого материала
zapros = "select * from \"spmat.dbf\" a inner join \"shmat.dbf\" b on a.shmat=b.shmat inner join \"sppro.dbf\" c on b.shpro=c.shpro order by mat" ;
DM->AdsQuery1->SQL->Clear();
DM->AdsQuery1->SQL->Add(zapros);
DM->AdsQuery1->Open();
//Запуск отчета
frxReport2->ShowReport();
//Открытие базы данных
DM->AdsConnection->IsConnected = false;
DM->AdsConnection->ConnectPath = GetCurrentDir()+"\\data\\";
//Открытие и создание индексированной таблицы "spmat"
DM->tblSpMat->Close();
DM->tblSpMat->IndexName = "";
DM->tblSpMat->Exclusive = true;
DM->tblSpMat->Open();
DM->tblSpMat->AdsCreateIndex("spmat.ntx","", "mat","","",TAdsIndexOptions());
DM->tblSpMat->IndexName = "spmat";
DM->AdsConnection->IsConnected = true;
}
//---------------------------------------------------------------------------
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог