Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

sql [D6, IB6.x]


gestern ©   (2003-12-09 21:26:00) 

Что-то не то с запросом. Есть 2 таблицы DIREKTOR и FOTO. Поля у них одинаковые. Мне нужно вытащить из них данные. Вот скрипт:
SELECT * from DIREKTOR , FOTO where(DIREKTOR.DOK="""+combobox3.Text+""")and(FOTO.DOK="""+combobox3.Text+""")";
А он мне пустое множесто в ответ. Подскажите где ошибся?


Zacho   (2003-12-10 00:21:00) [1]

Проще - сделать две (а может и одну) таблицу вместо 11-ти. Читайте Дейта. И осознайте, чем "декомпозиция ограниченной выборкой" (Ваш вариант) хуже "декомпозиции проекцией" (общепринятый вариант декомпозиции).
А с такой архитектурой БД - imho, только ХП с 11-ю select-ами и суммированием суммы (во тавтология !) между ними.
Или то же самое на клиенте.


gestern   (2003-12-10 00:01:00) [2]


> Все-таки пиши более вразумительно. Хотя бы приведи структуру
> таблиц, примерные данные в таблицах, и желаемый результат
> запроса. А то просто нифига не понятно, что есть и что надо
> получить.

Медицинский центр. 11 таблиц для записи в 11 кабинетов.Поля везде одинаковые.
Поля: id-понятно
fam-фамилия(пациента)
nam-имя(пациента)
tel-тел(пациента)
proz-процедура
dok-фамилия доктора проводящего процедуру
appar-апарат с пом. которого проводят процедуру
vremya-время записи
choslo-дата записи
zena-стоимость процедуры
Нужно в конце дня узнать сколько заработал доктор, доктор может делать процедуры в разных кпбинетах. Т.е. надо запросить по 11 таблицам по полю dok фамилию доктора, а по полю chislo-сегодняшнюю дату и просуммировать данный из полей zena этих таблиц. Надеюсь удалось изложить лучше. Так как это всё-таки проще сделать?


Maniac   (2003-12-09 23:34:00) [3]

Добавь в Where (d.dok=f.dok)


Zacho   (2003-12-09 23:19:00) [4]

Все-таки пиши более вразумительно. Хотя бы приведи структуру таблиц, примерные данные в таблицах, и желаемый результат запроса. А то просто нифига не понятно, что есть и что надо получить.


gestern   (2003-12-09 23:10:00) [5]

procedure TForm1.ComboBox3Change(Sender: TObject);
var
sql:string;
begin
sql:="SELECT * from DIREKTOR D, FOTO F where (D.DOK="""+combobox3.Text+""")or(F.DOK="""+combobox3.Text+""")";
IBDataset14.Close;
IBDataset14.SelectSQL.Clear;
IBDataset14.SelectSQL.Add(sql);
IBDataset14.Open;
IBDataset14.First;
end;
Так работает только вместо 2 записей(их пока в таблице только 2)выдеёт 2*n записей, где n формируется не знамо как?


gestern   (2003-12-09 23:07:00) [6]

Надо из 11 таблиц с одинаковыми названиями полей вытащить данные по текстовому полю DOK, с текстом из комбобокса. Подскажите как это проще сделать?


Zacho   (2003-12-09 22:43:00) [7]


> gestern (09.12.03 22:38) [4]

Все-же, что именно надо, UNION или JOIN ? Если JOIN, то см. [1]
Телепатов нет, приводи более подробную информацию.


gestern   (2003-12-09 22:38:00) [8]


> SELECT * from DIREKTOR where DOK="""+combobox3.Text+"""
> union
> SELECT * from FOTO where DOK="""+combobox3.Text+"""

Пишет Data type unknown


Zacho   (2003-12-09 22:25:00) [9]


> me (09.12.03 22:04) [2]

А это уже совсем другой запрос. UNION и INNER JOIN (пусть даже не явный, как у автора вопроса) - все-таки совершенно разные вещи. Впрочем, возможно автору требовался именно UNION, но так это или нет - знает только он :)


Zacho   (2003-12-09 22:04:00) [10]

Во первых, в запросах к нескольким таблицам всегда явно указывай алиасы таблиц, не совпадающие с именами таблиц, т.е. что-то типа SELECT ... from DIREKTOR D , FOTO F where(D.DOK="""+combobox3.Text+""")and(F.DOK="""+combobox3.Text+""")";
Во-вторых, перед выполнением запроса (Open или что там у тебя) c помощью, например, ShowMessage посмотри получившийся текст запроса и если после этого вопрос не решится - приведи его здесь. А то нам же не видно, что у тебя в combobox3.Text :-)


me   (2003-12-09 22:04:00) [11]

SELECT * from DIREKTOR where DOK="""+combobox3.Text+"""
union
SELECT * from FOTO where DOK="""+combobox3.Text+"""


Наверх

Титульная страница Поиск, карта сайта Написать письмо