Доброй ночи, хочу написать телефонный справочник. Есть две таблицы: одна главная, другая подчинённая со связью «один ко многим», т.е. у каждого человека может быть несколько номеров телефонов. Найти человека, а потом по связи увидеть его телефоны не проблема и без SQL. А как найти человека по телефону? (используя SQL). Может выбрать телефоны, а потом сравнить ключи в полученном запросе и главной таблице? Описать такую выборку чисто на делфях могу, а на SQL неа.
Гость
13.10.2007 4:44
SQL
SELECT TableUser.Name FROMTableUser INNER JOIN TablePhone ON TableUser.ID = TablePhone.UserID WHERE (((TablePhone.Phone)=[Phone Number here]));
выдаст тебе имя по номеру телефона.
Rian
13.10.2007 4:53
Попробую. Где-то я уже видел похожее. Если можно пару коментариев.
volvo
13.10.2007 5:54
А что непонятно? (пост выше - мой, авторизация не срабатывала)
Выбирается значение Name из TableUser, при этом рассматриваются только те записи таблицы TableUser, для поля TableUser.ID которой существует соответствующее поле TablePhone.UserID (об этом позаботится INNER JOIN). Ну, и кроме того, что эти поля должны совпадать, еще и соответствующее поле TablePhone.Phone должно совпадать с заданным для поиска номером (это уже забота WHERE)...
В результате получаем имя хозяина заданного телефона.
Rian
13.10.2007 11:18
спасибо за комент. просто я только вчера SQL-лом занялся и для меня оно ещё выглядит немножко как абракадабра
Rian
14.10.2007 11:39
volvo, я ведь правильно написал запрос? Но когда пытаюсь его выполнить выбивает ошибку, что поля key не существует.
< procedure TForm1.find_bClick(Sender: TObject); const j=chr(39); begin DataModule1.FindQuery.Active:=false; DataModule1.FindQuery.SQL.Clear;
всё равно не хочет. как-нибуть попробую с новой базой. может не понимает русские названия таблиц или в своей базе напихал чёрти чего так, что оно глючит.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.