Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Вниз

Как добавить поле в результат?   Найти похожие ветки 

 
Ш-К   (2007-03-04 01:33) [0]

Таблица table1(name, value).
name, value не уникальны.

Имею запрос, который меня почти устраивает:

select name, value from table1
where value in
   (select value from table1
      where name in ("name0", "name1", "name2", "name3"));


Т.е. в подзапросе я получаю все value, которые соответствуют константам ("name0", "name1", "name2", "name3"). Их может быть больше 4.
А потом, из той же таблицы все записи, соответствующие полученным value.
Мне нужно переписать запрос так, чтобы в результат добавилось еще поле, которое отобразит константу "name0", "name1" ...


 
Ш-К   (2007-03-04 01:52) [1]

Переформулирую.

select name, value
from table1
where name in ("name0", "name1", "name2", "name3")

это я получаю такой результат:
"name0" 132
"name0" 1244
"name1" 232435
"name1" 43
"name2" 324324
"name3" 2345
"name3" 34

А потом, для каждого value вывести не только все его name, но и базовый name в отдельном поле.
Все в одном запросе.


 
Anatoly Podgoretsky ©   (2007-03-04 07:52) [2]

> Ш-К  (04.03.2007 01:52:01)  [1]

Что такое базовое name


 
Ш-К   (2007-03-04 10:03) [3]

Базовое имя - это константа, по которой идет запрос:
"name0", "name1", "name2", "name3".

Т.е., если бы я выполнял запрос из одной константы, что-то типа:

select "name0", name, value from table1
where value in
(select value from table1
  where name in ("name0"));


Результат, отвечал бы задаче.
Что делать, когда несколько базовых имен?


 
Desdechado ©   (2007-03-04 17:59) [4]

Не понял, чем тебе name0 из поля name не базовый?


 
Ш-К   (2007-03-04 21:09) [5]

Потому что оно одно. А мне нужно и для "name1", "name2", "name3".

Вот так, только без Union:

select "name0", name, value from table1
where value in
(select value from table1
 where name in ("name0"))
union
select "name1", name, value from table1
where value in
(select value from table1
 where name in ("name1"))
union
select "name2", name, value from table1
where value in
(select value from table1
 where name in ("name2"))
union
select "name3", name, value from table1
where value in
(select value from table1
 where name in ("name3"))


 
Desdechado ©   (2007-03-04 21:21) [6]

SELECT name AS basovij_name, name, value
FROM Table1...

Или объясни понятнее свой "базовый". Это "опорный" или "из базы"? Или это эротическая фантазия, невоспроизводимая словами?


 
Ш-К   (2007-03-05 02:14) [7]


> Базовое имя - это константа, по которой идет запрос:
> "name0", "name1", "name2", "name3".


 
Ш-К   (2007-03-05 02:44) [8]

Ладно, забыли все.

Объясняю сначала с правильными словами.

Есть запрос:
select name, value from table1
where value in
(select value from table1
 where name in ("name0"));


который выдает результат:
a, 1
a, 2
b, 1
c, 3

Есть другой запрос:
select name, value from table1
where value in
(select value from table1
 where name in ("name1"));


Который выдает другой результат.
a, 1
f, 5
d, 1
c, 3

Мне надо объединить эти два результата. Но только добавить поле к каждой записи. Чтобы было видно, по какому критерию я их выбирал.

name0, a, 1
name0, a, 2
name0, b, 1
name0, c, 3
name1, a, 1
name1, f, 5
name1, d, 1
name1, c, 3

Запрос
select name, value from table1
where value in
(select value from table1
  where name in ("name0", "name1", "name2", "name3"));

Выдает то, что надо, только без указания: "name0", "name1", "name2", "name3". И выполняется он насколько секунд.

Если я сделаю:
select "name0", name, value from table1
where value in
(select value from table1
where name in ("name0"))
union
select "name1", name, value from table1
where value in
(select value from table1
where name in ("name1"))
union
...

Будет выполняться несколько часов. Етих слов("name0", "name1", "name2", "name3") больше 1000.


 
ЮЮ ©   (2007-03-05 03:53) [9]

Для начала замени union на union all


> Етих слов("name0", "name1", "name2", "name3") больше 1000.

Неужели пользователь столько вбивает их с клавиатуры? Или откуда они у тебя?
Это к тому, что если бы они лежали в отдельной таблице БД, то не надо было бы 1000 union, а хватило бы одного запроса


 
ЮЮ ©   (2007-03-05 03:56) [10]

Для начала замени union на union all


> Етих слов("name0", "name1", "name2", "name3") больше 1000.

Неужели пользователь столько вбивает их с клавиатуры? Или откуда они у тебя?
Это к тому, что если бы они лежали в отдельной таблице БД, то не надо было бы 1000 union, а хватило бы одного запроса


 
ЮЮ ©   (2007-03-05 03:58) [11]

Для начала замени union на union all


> Етих слов("name0", "name1", "name2", "name3") больше 1000.

Неужели пользователь столько вбивает их с клавиатуры? Или откуда они у тебя?
Это к тому, что если бы они лежали в отдельной таблице БД, то не надо было бы 1000 union, а хватило бы одного запроса


 
ЮЮ ©   (2007-03-05 04:17) [12]

Сорри, я не виноват, это всё DM-Client - виснет при отправке ответа


 
Ш-К   (2007-03-05 04:23) [13]

SELECT t.name, table1.name, table1.value
FROM table1 INNER JOIN
(SELECT table1.name, table1.value
FROM table1
WHERE table1.name In ("name0","name1","name2","name3")) AS t
On table1.value=t.value

Всем спасибо.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
15-1172499171
Petr V. Abramov
2007-02-26 17:12
2007.03.25
С почином!


2-1173068076
Tar
2007-03-05 07:14
2007.03.25
Функции и процедуры


6-1160311568
Falcao
2006-10-08 16:46
2007.03.25
Отследить событие RAS-соединения


3-1167911763
Костя
2007-01-04 14:56
2007.03.25
1.mdb в 1.dbf


2-1172759434
iviom
2007-03-01 17:30
2007.03.25
TRichEdit





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