![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать связь в SQL запросе? [D6, dBase, FoxPro]
b-Ars © (2002-10-31 12:10:00)Здравствуйте господа, прошу вашей помощи. Есть запрос:
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 раза. Как нужно писать правильно?
b-Ars (2002-11-01 12:18:00) [1]>ЮЮ © (31.10.02 13:23)
Ok, пасиба большое за труды, тока опять не работает :), я тут сам ещё подразобрался, странно конечно, но стоило сделать проверки нулевых значений и всё заработало.
ЮЮ (2002-10-31 13:23:00) [2]Проверь, на всякий случай, нет ли дублирующих записей для квартир
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)
ЮЮ (2002-10-31 13:19:00) [3]Честно говоря, тогда твой запрос правильный
Попробуй с другой стороны, с таблицы квартир, хотя это ничего не меняет:
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
b-Ars (2002-10-31 13:06:00) [4]Это не номер, это код, он уникальный, номер дома содержится в поле улица, т.е. Ленинская 22 - это дом с кодом 00156, а в базе Квартиры ему соответствеют 10 квартир, которые мне нужно вывести с этим адресом. Вы тескт запроса можете написать?
ЮЮ (2002-10-31 13:03:00) [5]Тогда все понятно :-)
Дома:
44а , Ленинская
44а , Пушкинская
Квартиры привязаны только к номеру дома, и не важно на какой улице он стоит :-)
44а, 18 (Предполагалось, что на Ленинской, но так как и на Пушкинской есть дом с таким номером, то запрос поместит эту же квартиру и туда же :-)
b-Ars (2002-10-31 12:56:00) [6]Номер дома, - нет его, есть код дома, который и есть ключевое поле, он в обеих базах (BUILDING). Улица - текстовое поле (в базе "Дома")
ЮЮ (2002-10-31 12:54:00) [7]А где НОМЕР ДОМА? А УЛИЦА - это текстовое поле, или код из справочника?
b-Ars (2002-10-31 12:49:00) [8]Ну ёж, моёж.
1-я база(Дома): ключ BUILDING, поле УЛИЦА
2-я база(Квартиры): ключ BUILDING, поле НОМЕР КВАРТИРЫ
Нужно показать всю базу "квартиры", и добавить в неё поле УЛИЦА (чтобы каждой квартире соответствовал её адрес, который есть в базе "Дома"). Надеюсь понятно?
ЮЮ (2002-10-31 12:43:00) [9]>чтобы одной записи первой базы соответствовала одна записть второй таблицы
Я то могу, когда пойму что надо? Нужно по одному дому с каждой улицы? Или по одной квартите с каждого дома каждой улицы?
b-Ars (2002-10-31 12:39:00) [10]>ЮЮ © (31.10.02 12:31), да нет же, я говорил, что проблема в том, что у меня идет произведение, мне надо чтобы одной записи первой базы соответствовала одна записть второй таблицы. Вы можете написать текст такого запроса?
ЮЮ (2002-10-31 12:31:00) [11]> а у меня идет произведение всех полей, т.е. каждая записть повторяется 4 раза.
Значит ты привёл не то запрос, в данном всё правильно:
2 таблицы, связа по одному полю, т.е. записей должно быть ровно столько, сколько есть квартир
b-Ars (2002-10-31 12:27:00) [12]>ЮЮ И ещё вот что он теперь пишет: When GROUP BY exists, every simple field in projectors must be in GROUP BY
b-Ars (2002-10-31 12:23:00) [13]>ЮЮ, Адрес дома хранитрся в базе "Дома", номер квартиры хранится в базе "Квартиры", у которой есть поле BUILDING аналогичное полю BUILDING в базе "Дома". Мне нужно показать адрес каждой квартиры и в каждом доме их отнуть не 4, и группировка тут не поможет, блин, нужна связь один к одному
ЮЮ (2002-10-31 12:19:00) [14]Добавь
GROUP BY BUILDES.REALSTREET, APARTS.REAL_NUMB
ведь в каждом доме по 4 квартиры. Хотя странно, почему номер дома хранится в таблице Квартиры :-)