Текущий архив: 2002.12.12;
Скачать: CL | DM;
Вниз
Столкнулся с сортировкой Lookup поля (( Найти похожие ветки
← →
AndrewVolkov (2002-11-21 16:17) [0]Доброго всем дня!!!
Есть 2 таблицы
таблица 1
People
id
name
Surname
Country_id
{-------}
таблица 2
Country
id
Nazvanie
{-------}
есть ibQuery
c текстом
select * from people
order by name
и у этого запроса добавлено Lookup Field "Country_Name"
которое по country_id вытаскивает Nazvanie из таблицы Country
Далее все данные помещаются в DBGrid, где при нажатии на заголовок окна я меняю строку в Запросе
order by <Имя поля>,
соответсвенно при нажатии на поле "Country_Name" выскочит ошибка что такого поля нет. Я могу подставить поле Country_ID, но это не совсем то, я отсортирую по ID а не по названию.
А возможно ли как-нибудь это организовать, чтобы сортировать Lookup Fields
← →
Prooksius © (2002-11-21 16:58) [1]Выбери в ibQuery название страны, помимо всего остального.
ibQuery.SQL := "select people.*, Country.Nazvanie from people, Country where people.Country_id = Country.id order by name"
и сортируй по названию
← →
AndrewVolkov (2002-11-21 18:38) [2]Я не совсем хороший пример дал.
Вся трабла в том, что Country_ID может быть Null и тогда при
where p.country_id=c.id эта запись не выберится. А мне нужны все записи.
А еще трабла в том, что у меня в таблице people 2 записи завязанные на таблицу country, типа страна рождения и страна смерти. Соответственно страны смерти может не быть, а иногда и страны рождения (нехватка данных). и запрос типа where p.country_id_birth=c.id and p.country_id_death=c.id Я получу вообще не то что надо.
← →
Val © (2002-11-21 18:55) [3]>AndrewVolkov (21.11.02 18:38)
..эта запись не выберится. А мне нужны все записи.
сделайте внешнее объединение
А еще трабла в том..
имеет место некорректное проектирование БД - избыточность данных, нужно не две записи с разными странами, а дополнительное поле с ид "страны смерти".
и то же внешнее объединение на справочник стран с разными псевдонимами.
а лукап поле тут совершенно не нужно.
← →
AndrewVolkov (2002-11-21 19:03) [4]to Val лукап согласен, просто как-то по умолчанию его влепил.
но дальше не совсем понял. Вот что у меня
CREATE TABLE SPORTSMEN (
ID ID NOT NULL,
NAME NAME NOT NULL,
SURNAME SURNAME NOT NULL,
DATE_BIRTH DATE,
DATE_DEATH DATE,
PLACE_BIRTH NAZVANIE ,
PLACE_DEATH NAZVANIE ,
COUNTRY_IDB INTEGER,
COUNTRY_IDD INTEGER,
FOTO BLOB SUB_TYPE 0,
MEMO BLOB SUB_TYPE 0,
CONSTRAINT SPORTSMEN_PK PRIMARY KEY (ID)
);
CREATE TABLE COUNTRY (
ID ID NOT NULL,
NUMBER INTEGER NOT NULL,
NAZVANIE NAZVANIE NOT NULL,
FOTO BLOB SUB_TYPE 0,
YEARU YEARTYPE ,
YEARD YEARTYPE ,
CONSTRAINT COUNTRY_PK PRIMARY KEY (ID)
);
вот из этого хочу view к примеру сделать.
← →
AndrewVolkov (2002-11-21 20:25) [5]Что никто не знает???
← →
AndrewVolkov (2002-11-21 21:03) [6]Ура, нашел как - никогда бы не допер, что так можно
← →
Vagrant © (2002-11-22 01:45) [7]Ну так поделись с народом находкой :-)
← →
AndrewVolkov (2002-11-22 15:38) [8]Делюсь, если кому интересно.
CREATE VIEW SPORTSMAN_VIEW(ID,NAME,SURNAME,DATE_BIRTH,DATE_DEATH,PLACE_BIRTH,PLACE_DEATH,COUNTRY_BIRTH,COUNTRY_DEATH)
AS
SELECT s.id, s.name, s.surname, s.date_birth, s.date_death,
s.place_birth, s.place_death,
( select country.nazvanie from country where country.id=sportsmen.country_idb),
(select country.nazvanie from country where country.id=sportsmen.country_idd)
FROM Sportsmen s
Встречный вопрос? Можа кто в курсе, если теперь я соответственно делаю
select * from SPORTSMAN_VIEW
order by id
это будет в 2 раза медленнее работать, или нет.
(потому что сначала типа view работает, а потом по ней еще 1 запрос)
← →
Prooksius © (2002-11-22 16:11) [9]Нет. Запрос будет выполняться, как если бы ты все написал одним запросом (select ... order by...)
← →
ЮЮ © (2002-11-23 09:02) [10]Но вот так:
SELECT s.id, s.name, s.surname, s.date_birth, s.date_death,
с1.nazvanie COUNTRY_BIRTH, с2.nazvanie COUNTRY_DEATH
from Sportsmen s
left join country c1 on c1.id=s.country_idb
left join country c2 on c2.id=s.country_idd
должно работать всяко быстрее, чем с подзапросом в каждой строке
Страницы: 1 вся ветка
Текущий архив: 2002.12.12;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.019 c