Помогите создать запрос по выборке из 3-х таблиц
Значит есть 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] !!!!
Значит есть 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] !!!!
where spmat.shmat = shmat.shmat
and shmat.shpro = sppro.shpro
?
Значит есть 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: в любой СУБД есть боле-менее нормальный визуальный построитель запросов, кидаешь мышкой туда таблицы, мышкой их соединяешь, и запрос готов
Ну значит через inner join, если вариант с where в вашей СУБД не работает. Смысл тот же самый.
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
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
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
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
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
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 таблица, остальные к ней джойнятся.
from "spmat.dbf" a
inner join "shmat.dbf" b on ...
inner join "sppro.dbf" c on ...
order by...
FROM shmat INNER JOIN
spmat ON shmat.shmat = spmat.shmat
INNER JOIN
sppro ON spmat.shmat = sppro.shpro
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]
Это ж разные поля и соответственно разные значения!!!
Это ж разные поля и соответственно разные значения!!!
ну у меня же нет этих таблиц с их правильными полями... я накидвл примерно 3 таблицы и объединил их
поменяй названия в объединении и будет щастье.
ЗЫ: СУБД какая?
ЗЫЗЫ: Дай SQL полный на создание всех 3-х таблиц
поменяй названия в объединении и будет щастье.
ЗЫ: СУБД какая?
ЗЫЗЫ: Дай SQL полный на создание всех 3-х таблиц
Значит передо мной задача такая!Есть уже готовые dbf файлы(вышеперечисленные).Мне необходимо на Buildere6 и Interbase реализовать отчет по выборке данных.Может я не корректно поясняю.Я новичок на этом форуме и воще в программировании!!!
в самом Билдере кидаешь на форму TQuery, правой кнопкой мыши по ней SQL Builder открывается редактор SQLя и в нем мышкой работаешь, он тебе сам потом готовый SQL выдаст (поместит его в TQuery::SQL)
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;
}
//---------------------------------------------------------------------------