Нужна помощь с SQL запросом

Доброго времени суток , собственно проблема заключается в следующем ,существуют 2 таблицы в одной хранится список пользователей во второй найминование книг между ними связь мастер деталь.Пользователи мастер ,книги деталь при помощи запроса я осуществляю поиск по пользователям нахожу его информацию. внимание вопрос каким образом используя еще один запрос осуществить некую связь мастер-деталь чтоб при нажатии на найденого пользователя (группы пользователей) получить перечень книг которые к нему(ним) присвоены собственно код которым ищу пользователя
procedure TForm1.Button2Click(Sender: TObject);
begin
if rg1.ItemIndex=0 then begin
dm.q1.Close;
dm.Q1.SQL.Clear;
dm.Q1.SQL.add('Select fam,imia,otv,studbilet,priznak,telefon,grupa from sstud ');
dm.q1.SQL.Add('where(fam=:pFam)');
dm.q1.prepare;
dm.q1.parambyname('pFam').asstring:=edit1.text;
dm.Q1.Open;
end
else
if rg1.ItemIndex=1 then begin
dm.q1.Close;
dm.Q1.SQL.Clear;
dm.Q1.SQL.add('Select fam,imia,otv,studbilet,priznak,telefon,grupa from sstud ');
dm.q1.SQL.Add('where(studbilet=:pstudb)');
dm.q1.prepare;
dm.q1.parambyname('pstudb').asstring:=edit1.text;
dm.Q1.Open
end
else
if rg1.ItemIndex=2 then begin
dm.q1.Close;
dm.Q1.SQL.Clear;
dm.Q1.SQL.add('Select fam,imia,otv,studbilet,priznak,telefon,grupa from sstud ');
dm.q1.SQL.Add('where(grupa=:pgrup)');
dm.q1.prepare;
dm.q1.parambyname('pgrup').asstring:=edit1.text;
dm.Q1.Open end;
if rg1.itemindex=-1 then
showmessage('âûáåðèòå êðèòåðèé äëÿ ïîèñêà');
3 ответа

Схематически это выглядит так:
SELECT * from Таблица книг WHERE knigatable.id=уникальный_идентификатор_найденого_пользователя
Хочешь нормальный запрос - дай структуру БД, а то не понятно немного!


Бд IterbaseТаблица Пользователей (sstud)Kod-Первичный ключТаблица Справочник Книг (sknigi)kod-Первичный ключ Idstud-Поле по которому осуществлена связь мастер деталь Kod из (sstud) мастер Idstud из (sknigi) деталь необходимо выводить книги которые соответствуют пользователю написал следуйший код
if rg1.ItemIndex<>-1 then begin
dm.Q2.Close;
dm.Q2.SQL.Clear;
dm.Q2.SQL.add('select imknigi from sstud,SKNIGI');
dm.Q2.SQL.add('where(idstud=sstud.kod)');
dm.Q2.Open; end;
логика такая если выбрана хоть одно значение из радио групп то производим поиск книг соответствующих пользователю необходимы только те у которых поле kod таблицы sstud будет равно полю idstud таблицы sknigi проблема в том что выше приведенный код выводить весь перечень книг без учета сравнения поля kod и sstud


Связь один ко многим. По твоей задумке будет избыточность. Студент может взять несколько книг. Необходимо создать еще таблицу в которой ты будешь хранить взятые книги студентом (id, studentid, bookid). students(studentid, name) books(bookid, name) studentBooks(id, studentid, bookid)Например вывожу книги которые взял Евгений:
SELECT st.name, b.name
FROM (SELECT s.name, sb.bookid
 FROM students AS s
 INNER JOIN
 studentBooks AS sb
 ON s.studentid = sb.studentid
 WHERE s.name = 'Евгений') AS st
 INNER JOIN
 books AS b
ON st.bookid = b.bookid 
--WHERE b.name = 'Золушка'