Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из выборки убрать стобец 
:(
    Опции темы
Artemon
Дата 13.7.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Есть запрос из таблицы, который кроме прочего, возвращается также столбец rownum, в котором содержится порядковый номер строки.

Вопрос: Как это поле исключить из выборки ?

Запрос примерно такой:

Код

select * from(
                select a.*, rownum rnum from
                                            (
                                            select * from ce101 order by Id 
                                            ) a where rownum <= 2 + 2 
             ) where rnum > 2


Но в ыборке rownum мне не нужен.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Zloxa
Дата 13.7.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(Artemon @  13.7.2011,  12:51 Найти цитируемый пост)
Как это поле исключить из выборки ?

перечислить во внешнем подзапросе все поля выборки, опустив ненужное



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Artemon
Дата 13.7.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Проблема в том, что я заранее не знаю какие стобцы в таблице.

А этот изврат с rownum, нужен лишь для того, чтобы можно было делать выборку порциями (аналог MySql limit)


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Zloxa
Дата 13.7.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Просто как забава, не как решение
Код

select * 
from(select a.*
       from(
            select * from ce101 order by Id 
           ) a 
       where rownum <= 2 + 2 
       order by id desc

where rownum <= 2
order by id

вроде б должно работать, если id not null

Добавлено через 2 минуты и 59 секунд
Цитата(Artemon @  13.7.2011,  13:05 Найти цитируемый пост)
Проблема в том, что я заранее не знаю какие стобцы в таблице.

Да, проблемма именно в том, что вы не знаете какие столбцы в таблице. И именно эту проблему стоит решать, а не частные, вытекающие из нее последствия  smile 

Если это нужно исключительно для клиенстких целей - что, в конце концов мешает отфильтрвать поле на клиенте?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Artemon
Дата 13.7.2011, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Цитата(Zloxa @  13.7.2011,  13:07 Найти цитируемый пост)
Да, проблемма именно в том, что вы не знаете какие столбцы в таблице. И именно эту проблему стоит решать


Это часть логики, которая нужна, но при этом порождает проблема.

Первоначальное зло - это то что хваленый Oracle не имеет аналога LIMIT

Это сообщение отредактировал(а) Artemon - 13.7.2011, 15:21


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Zloxa
Дата 13.7.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(Artemon @  13.7.2011,  15:19 Найти цитируемый пост)
Первоначальное зло - это то что хваленый Oracle не имеет аналога LIMIT

 smile 
Нет.. первоначальное зло, что в MySQL нет ансишного row_number и они выкрутились лимитом, стыренным, емнип у дибиту, а вы, в свою очередь недальновидно заложили свою архитектуру на использование этой фичи.

Впрочем, лимит это не самое кардинальное отличие MySQL от Оракли. )) Самое "вкусное" - не столь очевидно 

Это сообщение отредактировал(а) Zloxa - 13.7.2011, 19:22


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Artemon
Дата 14.7.2011, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Цитата(Zloxa @  13.7.2011,  17:09 Найти цитируемый пост)
Самое "вкусное" - не столь очевидно 

Это что например ?

Добавлено через 2 минуты и 42 секунды
Цитата(Zloxa @  13.7.2011,  17:09 Найти цитируемый пост)
 вы, в свою очередь недальновидно заложили свою архитектуру на использование этой фичи.


Попробуй тут заложи, когда MSSQL Server использует для ограничения вывода TOP, MySql LIMIT, Oracle  - RowNumber, остальные видимо еще что-то еще.
И необходимо чтобы все это поддерживалось в одном продукте. Но я конечно изголился и сделал, и даже все работает корректно, но осадок остался.








--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Zloxa
Дата 14.7.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(Artemon @  14.7.2011,  11:05 Найти цитируемый пост)
Это что например ?

совершенно, в корне разные принципы обеспечения изоляции транзакций.
Все коварство этой разницы заключается в том, что кривизна становится заметной только под многопользовательской нагрузкой.

Цитата(Artemon @  14.7.2011,  11:05 Найти цитируемый пост)
И необходимо чтобы все это поддерживалось в одном продукте.

Я всегда говорил что адекватный технический специалист врядли станет ратовать за абстрагирование от платформы бд.


Это сообщение отредактировал(а) Zloxa - 14.7.2011, 12:00


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Artemon
Дата 14.7.2011, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Цитата(Zloxa @  14.7.2011,  11:50 Найти цитируемый пост)
совершенно разные принципы обеспечения изоляции транзакций.Все коварство этой разницы заключается в том, сто кривизна становится заметной только под многопользовательской нагрузкой.

Раз уж начали эту тему, не моглибы показать живой примерчик такой кривизны ?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Zloxa
Дата 14.7.2011, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Как бы классика жанра:

Код

insert into table (id) select coalesce(max(id) + 1,1) from table

при конкурентном доступе в режиме изоляции read commited на блокировочниках(MS SQL,MySQL) не будет приводить к появлению дублирущися id, на версионниках (Oracle,FB,PG) - запросто.

Это сообщение отредактировал(а) Zloxa - 14.7.2011, 12:00


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Artemon
Дата 14.7.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



спасибо за пример


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Artemon
Дата 14.7.2011, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Zloxa, можешь посоветовать литературу по видам блокировок Oracle (и желательно MySql, MSSQL) ?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Zloxa
Дата 14.7.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(Artemon @  14.7.2011,  13:30 Найти цитируемый пост)
посоветовать литературу по видам блокировок Oracle 

В том то и дело, что не блокировками одними обеспечиватесся согласованность в оракле.
Основное и краеугольное отличие - чтение не блокирует запись, и, что более важно, запись не блокирует чтение. Согласованность чтений достигается тем,, что ханится история изменения данных. Именно по этому этот класс серверов и называется версионниками. Именно на этой фиче и вылез оракл.

http://download.oracle.com/docs/cd/E11882_...st.htm#CNCPT020

Цитата(Artemon @  14.7.2011,  13:30 Найти цитируемый пост)
и желательно MySql, MSSQL

 smile 
Тут я и сам по верхам нахватамшись.


Это сообщение отредактировал(а) Zloxa - 14.7.2011, 14:00


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1097 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.