Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизSQL Запрос Найти похожие ветки
← →
Назаров Евгений (2004-04-12 11:54) [0]Подскажите плиз, как оптимально сделать запрос, который получает список строк по их индексам? то есть есть таблица
A:
id,p1,p2,p3,p4,p5 (p- указатели на id строк в другой таблице B)
B:
idp,name
короче надо получить по id набор строк из таблицы B
и желательно, чтобы работало как можно быстрее, так как параметров на самом деле 10 , а строк в таблице А-12000
заранее спасибо
← →
Назаров Евгений (2004-04-12 11:54) [0]Подскажите плиз, как оптимально сделать запрос, который получает список строк по их индексам? то есть есть таблица
A:
id,p1,p2,p3,p4,p5 (p- указатели на id строк в другой таблице B)
B:
idp,name
короче надо получить по id набор строк из таблицы B
и желательно, чтобы работало как можно быстрее, так как параметров на самом деле 10 , а строк в таблице А-12000
заранее спасибо
← →
serge35 (2004-04-12 12:10) [1]Для каждого поля из таблицы А надо вводить новую таблицу В.
select id, p1,p2,p3
from a, b b1, b b2, b b3
where a.p1=b1.idp, a.p2=b2.idp, a.p3=b3.idp
попробуй так.
← →
serge35 (2004-04-12 12:10) [1]Для каждого поля из таблицы А надо вводить новую таблицу В.
select id, p1,p2,p3
from a, b b1, b b2, b b3
where a.p1=b1.idp, a.p2=b2.idp, a.p3=b3.idp
попробуй так.
← →
serge35 (2004-04-12 12:11) [2]Если не покатит, то через UNION.
← →
serge35 (2004-04-12 12:11) [2]Если не покатит, то через UNION.
← →
Назаров Евгений (2004-04-12 12:55) [3]в первом случае он просто выбирает id-шники, а надо строки, на которые они ссылаются !
← →
Назаров Евгений (2004-04-12 12:55) [3]в первом случае он просто выбирает id-шники, а надо строки, на которые они ссылаются !
← →
Johnmen © (2004-04-12 13:04) [4]В [1] посте уже ответили.
В чем проблема ? ВSELECT *
?
← →
Johnmen © (2004-04-12 13:04) [4]В [1] посте уже ответили.
В чем проблема ? ВSELECT *
?
← →
serge35 (2004-04-12 13:07) [5]Ну и...
У тебя теперь есть все id .
select * from a
where a.id in
(select id
from a, b b1, b b2, b b3
where a.p1=b1.idp, a.p2=b2.idp, a.p3=b3.idp)
← →
serge35 (2004-04-12 13:07) [5]Ну и...
У тебя теперь есть все id .
select * from a
where a.id in
(select id
from a, b b1, b b2, b b3
where a.p1=b1.idp, a.p2=b2.idp, a.p3=b3.idp)
← →
serge35 (2004-04-12 13:08) [6]А строки из какой таблицы нужны?
← →
serge35 (2004-04-12 13:08) [6]А строки из какой таблицы нужны?
← →
Назаров Евгений (2004-04-13 13:11) [7]Нужны строки из таблицы B , поле NAME:
пример:
Таблица А / Таблица B
id p1 p2 p3 / id Name
11 4 2 5 / 2 "Athlon"
12 1 3 2 / 3 "Palomino"
и т.д... / 4 "2000+"
/ 5 "Box"
Нужно, чтобы по известному id из таблицы А(например 11) выбрать соответствующие данные 2000+, Anhlon, Box
← →
Назаров Евгений (2004-04-13 13:11) [7]Нужны строки из таблицы B , поле NAME:
пример:
Таблица А / Таблица B
id p1 p2 p3 / id Name
11 4 2 5 / 2 "Athlon"
12 1 3 2 / 3 "Palomino"
и т.д... / 4 "2000+"
/ 5 "Box"
Нужно, чтобы по известному id из таблицы А(например 11) выбрать соответствующие данные 2000+, Anhlon, Box
← →
Johnmen © (2004-04-13 13:23) [8]
SELECT * FROM A
LEFT JOIN B ON A.p1=B.id
LEFT JOIN B ON A.p2=B.id
LEFT JOIN B ON A.p3=B.id
...
← →
Johnmen © (2004-04-13 13:23) [8]
SELECT * FROM A
LEFT JOIN B ON A.p1=B.id
LEFT JOIN B ON A.p2=B.id
LEFT JOIN B ON A.p3=B.id
...
← →
Назаров Евгений (2004-04-13 13:40) [9]так он выбирает всё, а надо только из одной строки, например по ID=11, выбираются p1 p2 p3 = 4 2 5, и по ним строки из таблицы В
2000+, Anhlon, Box
← →
Назаров Евгений (2004-04-13 13:40) [9]так он выбирает всё, а надо только из одной строки, например по ID=11, выбираются p1 p2 p3 = 4 2 5, и по ним строки из таблицы В
2000+, Anhlon, Box
← →
serge35 (2004-04-13 13:44) [10]select id, p1,p2,p3, name
from b
where b.id=11
← →
serge35 (2004-04-13 13:44) [10]select id, p1,p2,p3, name
from b
where b.id=11
← →
serge35 (2004-04-13 13:46) [11]sorry
select a.id,a.p1,a.p2,a.p3,b.id,b.name
from a, b
where a.id=b.id
and a.id=11
← →
serge35 (2004-04-13 13:46) [11]sorry
select a.id,a.p1,a.p2,a.p3,b.id,b.name
from a, b
where a.id=b.id
and a.id=11
← →
Johnmen © (2004-04-13 13:48) [12]>Назаров Евгений
Я понимаю, тяжело в лыжах по асфальту...
:)
← →
Johnmen © (2004-04-13 13:48) [12]>Назаров Евгений
Я понимаю, тяжело в лыжах по асфальту...
:)
← →
serge35 (2004-04-13 13:51) [13]При определенной физической подготовке вполне нормально.
← →
serge35 (2004-04-13 13:51) [13]При определенной физической подготовке вполне нормально.
← →
Назаров Евгений (2004-04-13 14:03) [14]>sergey35
ну я не знаю, хоть ползком :)) ну не работает !
a.id и b.id это разные вещи !
на b.id указывают цифры в полях a.p1 a.p2 a.p4
← →
Назаров Евгений (2004-04-13 14:03) [14]>sergey35
ну я не знаю, хоть ползком :)) ну не работает !
a.id и b.id это разные вещи !
на b.id указывают цифры в полях a.p1 a.p2 a.p4
← →
serge35 (2004-04-13 14:09) [15]> известному id из таблицы А(например 11) выбрать соответствующие данные
Как это понимать?
попробуй наоборот
select *
from a a1, a a2, a.3, b
where a1.p1=b.id
and a2.p2=b.id
and a3.p3=b.id
and b.id=11
← →
serge35 (2004-04-13 14:09) [15]> известному id из таблицы А(например 11) выбрать соответствующие данные
Как это понимать?
попробуй наоборот
select *
from a a1, a a2, a.3, b
where a1.p1=b.id
and a2.p2=b.id
and a3.p3=b.id
and b.id=11
← →
serge35 (2004-04-13 14:11) [16]или так
select *
from a, b
where a.p1=b.id
and b.id=11
UNION
select *
from a, b
where a.p2=b.id
and b.id=11
UNION
select *
from a, b
where a.p3=b.id
and b.id=11
← →
serge35 (2004-04-13 14:11) [16]или так
select *
from a, b
where a.p1=b.id
and b.id=11
UNION
select *
from a, b
where a.p2=b.id
and b.id=11
UNION
select *
from a, b
where a.p3=b.id
and b.id=11
← →
Назаров Евгений (2004-04-13 14:31) [17]так тоже не канает, но я сам сделал
вот что надо было:
select b1.name,b2.name,b3.name
from cat a, cat_parse b1, cat_parse b2, cat_parse b3
where a.p1=b1.id
and a.p2=b2.id
and a.p3=b3.id
and a.id=9750;
но это жуть неудобно, так как параметров на самом деле 10 штук (p1,p2-p10)
как бы это сделать через оператор in ?
← →
Назаров Евгений (2004-04-13 14:31) [17]так тоже не канает, но я сам сделал
вот что надо было:
select b1.name,b2.name,b3.name
from cat a, cat_parse b1, cat_parse b2, cat_parse b3
where a.p1=b1.id
and a.p2=b2.id
and a.p3=b3.id
and a.id=9750;
но это жуть неудобно, так как параметров на самом деле 10 штук (p1,p2-p10)
как бы это сделать через оператор in ?
← →
serge35 (2004-04-13 15:09) [18]Никак.
Скажи спасибо тому, кто так таблицы спроектировал.
← →
serge35 (2004-04-13 15:09) [18]Никак.
Скажи спасибо тому, кто так таблицы спроектировал.
← →
Назаров Евгений (2004-04-13 15:53) [19]я :) - а как было бы лучше ?
← →
Назаров Евгений (2004-04-13 15:53) [19]я :) - а как было бы лучше ?
← →
Fay © (2004-04-13 20:42) [20]
creare table B(
id integer not null,
name varchar(100) not null collate win1251,
constraint PK_B primary key (ID)
);
creare table A(
id integer not null,
name varchar(100) not null collate win1251,
constraint PK_A primary key (ID)
);
creare table C(
A integer not null,
B integer not null,
constraint PK_C primary key (A, B),
constraint FK_C_A foreign key (A) references A(ID),
constraint FK_C_B foreign key (B) references B(ID)
);
select
B.*
from B, C
where
B.ID = C.B
and C.A = 10
← →
Fay © (2004-04-13 20:42) [20]
creare table B(
id integer not null,
name varchar(100) not null collate win1251,
constraint PK_B primary key (ID)
);
creare table A(
id integer not null,
name varchar(100) not null collate win1251,
constraint PK_A primary key (ID)
);
creare table C(
A integer not null,
B integer not null,
constraint PK_C primary key (A, B),
constraint FK_C_A foreign key (A) references A(ID),
constraint FK_C_B foreign key (B) references B(ID)
);
select
B.*
from B, C
where
B.ID = C.B
and C.A = 10
← →
Назаров Евгений (2004-04-14 11:55) [21]constraint PK_C primary key (A, B),
constraint FK_C_A foreign key (A) references A(ID),
constraint FK_C_B foreign key (B) references B(ID)
подскажите пожалуйста, на сколько ускоряют эти строки работу ??
и подскажите , где можно почитать про индексы (как они создаются, на сколько ускоряют работу ), до сей момента никогда не пользовался ими, так как база была маленькая, скорости хватало...
← →
Назаров Евгений (2004-04-14 11:55) [21]constraint PK_C primary key (A, B),
constraint FK_C_A foreign key (A) references A(ID),
constraint FK_C_B foreign key (B) references B(ID)
подскажите пожалуйста, на сколько ускоряют эти строки работу ??
и подскажите , где можно почитать про индексы (как они создаются, на сколько ускоряют работу ), до сей момента никогда не пользовался ими, так как база была маленькая, скорости хватало...
← →
serge35 (2004-04-14 12:04) [22]Надо было задавать вопросы до проектирования таблиц.
Не надо никогда скупиться на таблицы и на количество полей в таблицах.
Надо было сделать таблицу А и для кождого поля р сделать другую таблицу. т.е.
р1 ссылается на таблицу В, р2 на таблицу С, р3 на таблицу D и т.д.
Тогда был бы очень красивый запрос
select * from a, b, c, d
where a.p1=b.id
and a.p2=c.id
and a.p3=d.id
И работал бы он в несколко раз быстрее!
← →
serge35 (2004-04-14 12:04) [22]Надо было задавать вопросы до проектирования таблиц.
Не надо никогда скупиться на таблицы и на количество полей в таблицах.
Надо было сделать таблицу А и для кождого поля р сделать другую таблицу. т.е.
р1 ссылается на таблицу В, р2 на таблицу С, р3 на таблицу D и т.д.
Тогда был бы очень красивый запрос
select * from a, b, c, d
where a.p1=b.id
and a.p2=c.id
and a.p3=d.id
И работал бы он в несколко раз быстрее!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.071 c