Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.21;
Скачать: CL | DM;

Вниз

Как сделать связь в SQL запросе?   Найти похожие ветки 

 
b-Ars ©   (2002-10-31 12:10) [0]

Здравствуйте господа, прошу вашей помощи. Есть запрос:

SELECT BUILDES.BUILDING AS BBUILD, BUILDES.REALSTREET,
APARTS.BUILDING AS ABUILD, APARTS.REAL_NUMB
FROM "\\data\WorkDB\Buildes.dbf" AS BUILDES,
"\\data\WorkDB\Aparts.dbf" AS APARTS
WHERE BUILDES.BUILDING=APARTS.BUILDING

В базе BUILDES поле REALSTREET - улица
В базе APARTS поле REAL_NUMB - номер
В обеих базах есть ключевое поле BUILDING, по которому идет связь

Я хочу, чтобы в итоге у меня отобразились улица и её номер по ключу BUILDING, а у меня идет произведение всех полей, т.е. каждая записть повторяется 4 раза. Как нужно писать правильно?


 
ЮЮ ©   (2002-10-31 12:19) [1]

Добавь
GROUP BY BUILDES.REALSTREET, APARTS.REAL_NUMB
ведь в каждом доме по 4 квартиры. Хотя странно, почему номер дома хранится в таблице Квартиры :-)


 
b-Ars ©   (2002-10-31 12:23) [2]

>ЮЮ, Адрес дома хранитрся в базе "Дома", номер квартиры хранится в базе "Квартиры", у которой есть поле BUILDING аналогичное полю BUILDING в базе "Дома". Мне нужно показать адрес каждой квартиры и в каждом доме их отнуть не 4, и группировка тут не поможет, блин, нужна связь один к одному


 
b-Ars ©   (2002-10-31 12:27) [3]

>ЮЮ И ещё вот что он теперь пишет: When GROUP BY exists, every simple field in projectors must be in GROUP BY


 
ЮЮ ©   (2002-10-31 12:31) [4]

> а у меня идет произведение всех полей, т.е. каждая записть повторяется 4 раза.

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


 
b-Ars ©   (2002-10-31 12:39) [5]

>ЮЮ © (31.10.02 12:31), да нет же, я говорил, что проблема в том, что у меня идет произведение, мне надо чтобы одной записи первой базы соответствовала одна записть второй таблицы. Вы можете написать текст такого запроса?


 
ЮЮ ©   (2002-10-31 12:43) [6]

>чтобы одной записи первой базы соответствовала одна записть второй таблицы

Я то могу, когда пойму что надо? Нужно по одному дому с каждой улицы? Или по одной квартите с каждого дома каждой улицы?



 
b-Ars ©   (2002-10-31 12:49) [7]

Ну ёж, моёж.

1-я база(Дома): ключ BUILDING, поле УЛИЦА
2-я база(Квартиры): ключ BUILDING, поле НОМЕР КВАРТИРЫ

Нужно показать всю базу "квартиры", и добавить в неё поле УЛИЦА (чтобы каждой квартире соответствовал её адрес, который есть в базе "Дома"). Надеюсь понятно?


 
ЮЮ ©   (2002-10-31 12:54) [8]

А где НОМЕР ДОМА? А УЛИЦА - это текстовое поле, или код из справочника?


 
b-Ars ©   (2002-10-31 12:56) [9]

Номер дома, - нет его, есть код дома, который и есть ключевое поле, он в обеих базах (BUILDING). Улица - текстовое поле (в базе "Дома")


 
ЮЮ ©   (2002-10-31 13:03) [10]

Тогда все понятно :-)
Дома:
44а , Ленинская
44а , Пушкинская

Квартиры привязаны только к номеру дома, и не важно на какой улице он стоит :-)

44а, 18 (Предполагалось, что на Ленинской, но так как и на Пушкинской есть дом с таким номером, то запрос поместит эту же квартиру и туда же :-)


 
b-Ars ©   (2002-10-31 13:06) [11]

Это не номер, это код, он уникальный, номер дома содержится в поле улица, т.е. Ленинская 22 - это дом с кодом 00156, а в базе Квартиры ему соответствеют 10 квартир, которые мне нужно вывести с этим адресом. Вы тескт запроса можете написать?


 
ЮЮ ©   (2002-10-31 13:19) [12]

Честно говоря, тогда твой запрос правильный
Попробуй с другой стороны, с таблицы квартир, хотя это ничего не меняет:

SELECT BUILDES.BUILDING AS BBUILD, BUILDES.REALSTREET,
APARTS.BUILDING AS ABUILD, APARTS.REAL_NUMB
FROM "\\data\WorkDB\Aparts.dbf" AS APARTS,
"\\data\WorkDB\Buildes.dbf" AS BUILDES
WHERE APARTS.BUILDING=BUILDES.BUILDING

или

SELECT BUILDES.BUILDING AS BBUILD, BUILDES.REALSTREET,
APARTS.BUILDING AS ABUILD, APARTS.REAL_NUMB
FROM "\\data\WorkDB\Aparts.dbf" AS APARTS
LEFT JOIN
"\\data\WorkDB\Buildes.dbf" AS BUILDES
ON APARTS.BUILDING=BUILDES.BUILDING


 
ЮЮ ©   (2002-10-31 13:23) [13]

Проверь, на всякий случай, нет ли дублирующих записей для квартир

SELECT BUILDING AS ABUILD, REAL_NUMB, COUNT(BUILDING) CNT
FROM "\\data\WorkDB\Aparts.dbf" AS APARTS
GROUP BY BUILDING, REAL_NUMB
HAVING (COUNT(BUILDING)>1)


 
b-Ars ©   (2002-11-01 12:18) [14]

>ЮЮ © (31.10.02 13:23)
Ok, пасиба большое за труды, тока опять не работает :), я тут сам ещё подразобрался, странно конечно, но стоило сделать проверки нулевых значений и всё заработало.




Страницы: 1 вся ветка

Текущий архив: 2002.11.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
14-69492
Andrey
2002-11-01 10:45
2002.11.21
Вопорс по Linux


1-69349
Anar
2002-11-10 00:32
2002.11.21
OnCloseQuery


14-69560
lipskiy
2002-11-02 11:40
2002.11.21
Связь между приложениями


1-69336
Maksss
2002-11-12 19:02
2002.11.21
Подскажите как это сделать плыз...


1-69362
[NEW]Splinter
2002-11-10 10:40
2002.11.21
Как записать в exe-шник?