Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Вниз

Как сделать связь в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
1-69254
Loser
2002-11-11 19:50
2002.11.21
Работа с Памятью


7-69593
AlexandrRya
2002-09-20 00:04
2002.11.21
Размер файлов


4-69629
Igor_173
2002-10-11 07:04
2002.11.21
Как отключить защиту от копирования в буфер


4-69617
Alex_win
2002-10-10 10:09
2002.11.21
приостановить приложение


14-69559
Akhmadey
2002-11-03 19:19
2002.11.21
Где взять рабочие компоненты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский