Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1081319370
int64
2004-04-07 10:29
2004.05.09
О провилах хорошего тона в программировании.


1-1082741990
Lena19
2004-04-23 21:39
2004.05.09
checkbox1.Font.Color:=clred; а в ответ тишина


7-1080330501
Asd
2004-03-26 22:48
2004.05.09
Блокируем Cd-rom что не так делаю


1-1082617713
Григорьев Антон
2004-04-22 11:08
2004.05.09
Непрозрачные проволочные поверхности в OpenGL


8-1076483319
g-l-u-k
2004-02-11 10:08
2004.05.09
Исходники мультимедия програм





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский