Форум: "Базы";
Текущий архив: 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