Помогите с запросом!
От: corpse56  
Дата: 08.10.10 11:42
Оценка:
есть таблица с одной колонкой вида:

ID
---
1
2
3
3

4
4
4
5

6
3
7
8

9
2
-------------

хочу получить:

ID
---
2
2
3
3

3
4
4
4

-------------


что-то запутался...


спасибо!
Re: Помогите с запросом!
От: Снег  
Дата: 08.10.10 12:36
Оценка: :)
C>что-то запутался...
Готов убить самого себя за такой запрос...
С другой стороны, если исходная таблица маленькая и обращений к ней немного, то можно и оставить как есть.

select * into #t from (
select 1 as v
union all select 2
union all select 3
union all select 3
union all select 4
union all select 4
union all select 4
union all select 5
union all select 6
union all select 3
union all select 7
union all select 8
union all select 9
union all select 2
) t

select * from #t where v in 
(
  select v from (
    select v, count(v) as cnt from #t group by v having count(v) > 1
  ) tt
)
order by v

drop table #t
http://vishnyasoft.com/
Re[2]: Помогите с запросом!
От: Снег  
Дата: 08.10.10 12:38
Оценка: +2
С>select * from #t where v in
С>(
С> select v from (
С> select v, count(v) as cnt from #t group by v having count(v) > 1
С> ) tt
С>)
С>order by v

Вот почему нельзя редактировать свои сообщения?
Лучше так:
select * from #t 
where v in 
(
  select v as cnt from #t group by v having count(v) > 1
)
order by v
http://vishnyasoft.com/
Re[2]: Помогите с запросом!
От: corpse56  
Дата: 11.10.10 09:47
Оценка:
Здравствуйте, Снег, Вы писали:


спасибо! сработало! второй вариант, конечно, выглядит лучше!


С>Готов убить самого себя за такой запрос...


почему? а за второй вариант, тоже готов убить себя?
Re[3]: Помогите с запросом!
От: Снег  
Дата: 11.10.10 13:07
Оценка:
C>почему? а за второй вариант, тоже готов убить себя?

В первом варианте в подзапросе лишняя колонка ("хвост" от неудачного варианта).

Запрос неоптимальный. Это видно из плана запроса (у меня два Table Scan по одной таблице).
Т.е. если исходная таблица будет большой, то такой запрос может работать неприемлемо долго.
Но как наглядный пример пошагового решения задачи он как раз подходит.
http://vishnyasoft.com/
Re: Помогите с запросом!
От: hagane  
Дата: 11.10.10 16:48
Оценка:
Здравствуйте, corpse56, Вы писали:

C>есть таблица с одной колонкой вида:

C>[скипнуто]
C>хочу получить:
C>[порезано]

select id from table_name
where id in (2,3,4)
order by id asc


C>что-то запутался...

ну бывает, ничего
C>спасибо!
да на здоровье!
Как-то так.
Re[4]: Помогите с запросом!
От: _d_m_  
Дата: 12.10.10 02:18
Оценка:
Здравствуйте, Снег, Вы писали:

С>Запрос неоптимальный. Это видно из плана запроса (у меня два Table Scan по одной таблице).

С>Т.е. если исходная таблица будет большой, то такой запрос может работать неприемлемо долго.

О сколько нам открытий чудных...
Если таблица будет большой, вполне возможно у запроса изменится план.
На малой табличке зачастую Table Scan выгоднее, чем Index Seek.
Re[2]: Помогите с запросом!
От: corpse56  
Дата: 15.10.10 14:58
Оценка:
Здравствуйте, hagane, Вы писали:

H>
H>select id from table_name
H>where id in (2,3,4)
H>order by id asc
H>


Это не то! я же не знаю заранее 2,3,4! а если их тысячи? тога что?
Re[3]: Помогите с запросом!
От: Alexey Frolov Беларусь  
Дата: 15.10.10 16:25
Оценка:
Здравствуйте, corpse56, Вы писали:

C>Здравствуйте, hagane, Вы писали:


H>>
H>>select id from table_name
H>>where id in (2,3,4)
H>>order by id asc
H>>


C>Это не то! я же не знаю заранее 2,3,4! а если их тысячи? тога что?


Тут как говорится — каков вопрос, таков ответ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.