powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно это сделать
9 сообщений из 9, страница 1 из 1
Как правильно это сделать
    #32315595
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
при запросе к базе он выдает ошибку что:
данный подчиненный запрос должен возвращать не более одной записи,
как это пинимать?

и это бывает когда в одной таблице повторяются данные (кроме индекса)
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32315608
Проходимец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос в студию.

скорее всего это что-то типа
SELECT * FROM table1
WHERE (id = (SELECT id FROM table1 WHERE id LIKE '%2%'))

а должно быть
SELECT * FROM table1
WHERE (id IN (SELECT id FROM table1 WHERE id LIKE '%2%'))
либо
SELECT * FROM table1
WHERE (id = (SELECT id FROM table1 WHERE id =2 ))

больше ничего похожего на лету сэмулировать не удалось ;)
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32315621
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sql = "select nom_kv from kv where id_dom = (select id_dom from dom where nom_dom = " & "'" & CStr(dc_dom.Text) & "'" & ")" & " order by nom_kv"


вот был мой запрос
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32315627
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот мой пример:

допустим в базе test есть 4 табл:
street (с полями: id_st и st_name) ,
dom (с полями: id_dom, nom_dom и id_st (связанное с id_st из табл street)) ,
kv (id_kv, nom_kv, id_dom (связан с табл. dom))
man (id_m, name, id_kv(связь с табл. kv))

на форме есть 3 датакомбо первый отображающий из первой таблици название улиц, во вторм дома на этой улице и т.д. при клике на улицу все номера домов отображиются в датагриде, и так далее

так вот как сделать чтоб при клике на улицу отображались только те дома, которые к ней относятся, в ней есть повторяющиеся названия котрые вот при таком запросе ругается:

sql = "select name from man where id_kv = (select id_kv from kv where nom_kv = " & dc_kv.Text & ")" & " order by name"

если нет повторений то все нормально.

что надо поправить или дописать?

а так же можно предложить свой вариант проектирование этой базы.
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32315784
Проходимец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
писал:
sql = "select nom_kv from kv where id_dom = (select id_dom from dom where nom_dom = " & "'" & CStr(dc_dom.Text) & "'" & ")" & " order by nom_kv"
вот был мой запрос


не геморойся с комбами
вешай 4 грида - улицы, дома, квартиры и хуманы.
для каждой квери сделай датасорс и на их события onDataCnahge вешай

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dsStreetsOnDataChange(...)

[doma].close;
[doma].params[ 0 ].value := [street].street_id
[doma].open;

в квере [doma] пишешь 
select * from dom where stree_id = :street_id order by nomer_dom



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dsDomaOnDataChange(...)

[kv].close;
[kv].params[ 0 ].value := [doma].dom_id
[kv].open;

в квере [kv] пишешь 
select * from kv where dom_id = :dom_id order by nomer_kv


ну и аналогично с хуманами

в начале открываешь только скисок улиц, все остальные таблицы будут открыты автоматом
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32315805
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нечего не понял ну все равно спасибо. только я на VB пишу, и впринципи нет разницы в чем обрабатовать, главно грамотно запрос сделать и базу тоже правильно спроектировать.

И еще по базе, на твой взгляд она правильно спроектированна?
или еще ей надо пару параметров засунуть?
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32315828
Проходимец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с самого начала не очень внимательно прочитал
Код: plaintext
1.
sql =  "select name from man where id_kv = (select id_kv from kv where nom_kv = "  & dc_kv.Text &  ")"  &  " order by name"  

ошибка в том, что номера квартиры будут повторятся и непонятно чью фалимию возвращать, Вася из кв. 34 дома 14 по улице Строителей, либо Петя из кв. 34 дома 45 по улице еще какой-нить...

Тогда либо используй в запросе (и соотвественно добавляй поля, id_dom, id_street) условие еще и по id_домов/id_улиц/
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32315941
hangkil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как бы глабной таблицей здесь является номера квартир в которых проживают жители по такой то улице, так что надо сделать такой запрос чтоб можно было по квартире на кокой то улице отобразить жителей (где жителей в квартире будет и 4 и 5 и 10),
как лучше спроектировать базу в таком случаи, может че и надо добавить в таблици (дополнительные поля например код улици)

пособетуйте, я просто первый раз сталкиваюсь с проектированием баз
...
Рейтинг: 0 / 0
Как правильно это сделать
    #32318732
Фотография babaEGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя просто :

Код: plaintext
1.
2.
3.
4.
select man.name 
from man, kv 
where kv.nom_kv =  " & dc_kv.Text & "  
and man.id_kv=kv.id_kv
order by man.name 
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно это сделать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]