Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 VIEW и TOP  [new]
InterventXXX
Member

Откуда:
Сообщений: 5
Добрый день.

Прошу помощи....

Нужно ограничить количество строк в выборке из таблицы с которой работает клиентское приложение, изменить поведение которого "классически" нельзя.
Сделал VIEW (select top 10 * from tbl_a) - раньше такими вьюшками пользовался в mySQL, а здесь обнаружил одну мягко говоря неприятность: при запросе к VIEW сначала делается выборка top 10, а потом накладываются фильтры из запроса - надо с точностью до наоборот. Можно ли вообще такое реализовать???

P.S. SQL Server 2012.
21 май 13, 08:16    [14324325]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
When ORDER BY is used in the definition of a view, inline function, derived table, or subquery, the clause is used only to determine the rows returned by the TOP clause. The ORDER BY clause does not guarantee ordered results when these constructs are queried, unless ORDER BY is also specified in the query itself.
21 май 13, 08:59    [14324361]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Сергей Викт., Это что касается ORDER BY
21 май 13, 08:59    [14324362]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Glory
Member

Откуда:
Сообщений: 104751
InterventXXX
а здесь обнаружил одну мягко говоря неприятность: при запросе к VIEW сначала делается выборка top 10, а потом накладываются фильтры из запроса - надо с точностью до наоборот.

Вот вы выдумщик.
21 май 13, 09:09    [14324382]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Glory
InterventXXX
а здесь обнаружил одну мягко говоря неприятность: при запросе к VIEW сначала делается выборка top 10, а потом накладываются фильтры из запроса - надо с точностью до наоборот.

Вот вы выдумщик.
Самое удивительное - это утверждение, что это так работает в MySQL.
Неужто правда? А разве там есть TOP()?
21 май 13, 09:24    [14324435]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31970
Glory
InterventXXX
а здесь обнаружил одну мягко говоря неприятность: при запросе к VIEW сначала делается выборка top 10, а потом накладываются фильтры из запроса - надо с точностью до наоборот.

Вот вы выдумщик.
А почему выдумщик, именно так ведь работает?
use tempdb
go
create view test_vw
as
select top 10 id from sysobjects order by id desc
go
select * from test_vw
select id from sysobjects where id < 100 order by id desc
select * from test_vw where id < 100
go
drop view test_vw
21 май 13, 09:59    [14324599]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
alexeyvg
Glory
пропущено...

Вот вы выдумщик.
А почему выдумщик, именно так ведь работает?
use tempdb
go
create view test_vw
as
select top 10 id from sysobjects order by id desc
go
select * from test_vw
select id from sysobjects where id < 100 order by id desc
select * from test_vw where id < 100
go
drop view test_vw
Что значит "работает"?
Нет ошибки в синтаксисе?
Или действительно внутри VIEW накладываются условия внешнего запроса,
а только потом из них берутся 10 записей?

Выполнил Ваш скрипт (думал, может, действительно мир перевернулся).
Но нет. Сервер всё ещё нормальный.
21 май 13, 10:08    [14324667]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
aleks2
Guest
iap
Или действительно внутри VIEW накладываются условия внешнего запроса,
а только потом из них берутся 10 записей?


ТС наооборот нада. Сначала ВНЕШНИЕ условия - потом TOP.

ЗЫ. Мечтать невредно.
21 май 13, 10:10    [14324691]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Glory
Member

Откуда:
Сообщений: 104751
alexeyvg
А почему выдумщик, именно так ведь работает?

Значит в MySQL все наоборот тогда получается что ли ?
21 май 13, 10:15    [14324737]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
aleks2
iap
Или действительно внутри VIEW накладываются условия внешнего запроса,
а только потом из них берутся 10 записей?


ТС наооборот нада. Сначала ВНЕШНИЕ условия - потом TOP.

ЗЫ. Мечтать невредно.
Дык, я так сразу и понял.
Не верю, что в MySQL так работает!
21 май 13, 10:18    [14324764]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31970
iap
Или действительно внутри VIEW накладываются условия внешнего запроса,
а только потом из них берутся 10 записей?

Выполнил Ваш скрипт (думал, может, действительно мир перевернулся).
Но нет. Сервер всё ещё нормальный.

Нет, я подтвердил слова InterventXXX: "при запросе к VIEW сначала делается выборка top 10, а потом накладываются фильтры из запроса"

Ведь Glory с этим не согласился...
Glory
alexeyvg
А почему выдумщик, именно так ведь работает?

Значит в MySQL все наоборот тогда получается что ли ?
Я даже не знаю, есть ли в MySQL TOP :-)

Но если есть, то наверное так же.
aleks2
ЗЫ. Мечтать невредно.
Тоже думаю, что без модификации приложения сделать ничего нельзя.
21 май 13, 10:21    [14324803]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
alexeyvg
Ведь Glory с этим не согласился...
Он не согласился с этим:
InterventXXX
надо с точностью до наоборот
насколько я понял.
Впрочем, уже неважно
21 май 13, 10:26    [14324835]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Glory
Member

Откуда:
Сообщений: 104751
alexeyvg
Ведь Glory с этим не согласился...
Glory
пропущено...

Значит в MySQL все наоборот тогда получается что ли ?
Я даже не знаю, есть ли в MySQL TOP :-)

ТС утверждает, что view-ы в MySQL и MSSQL работают по-разному.
А именно, в MSSQL "при запросе к VIEW сначала делается, а потом накладываются фильтры из запроса", а MySQL - "все наоборот"
21 май 13, 10:28    [14324859]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
ребята break - все согласны что желание TC - бред но спорите друг с другом по разному истолковав высказывания друг друга
21 май 13, 10:43    [14324958]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31970
Glory
alexeyvg
Ведь Glory с этим не согласился...
пропущено...
Я даже не знаю, есть ли в MySQL TOP :-)

ТС утверждает, что view-ы в MySQL и MSSQL работают по-разному.
А именно, в MSSQL "при запросе к VIEW сначала делается, а потом накладываются фильтры из запроса", а MySQL - "все наоборот"
А, ну значит, я вас не так понял.
21 май 13, 12:05    [14325604]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
InterventXXX
Member

Откуда:
Сообщений: 5
Прошу прощения что навел смуту, по поводу mySQL я действительно погорячился (ясно что в синтаксисе там LIMIT а не TOP суть была не в этом), сейчас проверил VIEW там ведет себя точно так же, и в принципе это логично. LIMIT использовал для других целей, просто память что-то перепутала)

Вот только вопрос то остался - как сделать чтоб Вьюшка выдавала пользователю(а точнее клиентской проге) не более 10 строк и при этом считалась с WHERE из его запроса.
21 май 13, 12:54    [14326133]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Glory
Member

Откуда:
Сообщений: 104751
InterventXXX
Вот только вопрос то остался - как сделать чтоб Вьюшка выдавала пользователю(а точнее клиентской проге) не более 10 строк и при этом считалась с WHERE из его запроса.

Сначала сделать WHERE, а потом TOP - разве не очевидно ?
21 май 13, 12:56    [14326155]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
InterventXXX
Прошу прощения что навел смуту, по поводу mySQL я действительно погорячился (ясно что в синтаксисе там LIMIT а не TOP суть была не в этом), сейчас проверил VIEW там ведет себя точно так же, и в принципе это логично. LIMIT использовал для других целей, просто память что-то перепутала)

Вот только вопрос то остался - как сделать чтоб Вьюшка выдавала пользователю(а точнее клиентской проге) не более 10 строк и при этом считалась с WHERE из его запроса.


никак. Вьюшка это уже есть код, который отрабатывает, а потом на него вы уже накладываете условие в приложении. Поправьте, если я ошибаюсь.
21 май 13, 12:56    [14326158]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Glory
InterventXXX
Вот только вопрос то остался - как сделать чтоб Вьюшка выдавала пользователю(а точнее клиентской проге) не более 10 строк и при этом считалась с WHERE из его запроса.

Сначала сделать WHERE, а потом TOP - разве не очевидно ?

ТС имеет ввиду, что типа WHERE как "параметр" будет передаваться во вью, а та уже своим топом обрежет результат.
21 май 13, 12:57    [14326172]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
InterventXXX
Member

Откуда:
Сообщений: 5
И вообще, не понятно откуда столько негатива - желание по-моему весьма пристойное, особенно когда база растет, а клиентское приложение исправить нельзя!
21 май 13, 12:58    [14326184]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Сергей Викт.
Glory
пропущено...

Сначала сделать WHERE, а потом TOP - разве не очевидно ?

ТС имеет ввиду, что типа WHERE как "параметр" будет передаваться во вью, а та уже своим топом обрежет результат.
Все поняли давно, мне кажется.
Тут может сгодиться параметрическое VIEW, то есть табличная inline функция.
21 май 13, 13:00    [14326206]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Гость333
Member

Откуда:
Сообщений: 3683
InterventXXX
желание по-моему весьма пристойное, особенно когда база растет, а клиентское приложение исправить нельзя!

Ну тогда опишите, какими запросами обращается к базе клиентское приложение, какой результат возвращают эти запросы, почему результат запросов не устраивает, и какой "скорректированный" результат хотелось бы видеть.
21 май 13, 13:01    [14326216]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
InterventXXX
И вообще, не понятно откуда столько негатива - желание по-моему весьма пристойное, особенно когда база растет, а клиентское приложение исправить нельзя!

CREATE TABLE tmp(id int)
GO

INSERT INTO tmp
VALUES(1)
INSERT INTO tmp
VALUES(2)
INSERT INTO tmp
VALUES(3)
INSERT INTO tmp
VALUES(4)
GO
SELECT * FROM tmp
GO
CREATE VIEW v_tmp AS
SELECT TOP 2 * FROM tmp
GO
SELECT * FROM v_tmp
SELECT * FROM v_tmp WHERE id>3


DROP TABLE tmp
DROP VIEW v_tmp


Запустите, и вы всё увидите сами
21 май 13, 13:02    [14326221]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Кстати, возможно, ТС проталкивает кривое решение некой неизвестной нам задачи.
В то время как, возможно, есть более правильное решение, которого ТС сам не видит.
21 май 13, 13:04    [14326247]     Ответить | Цитировать Сообщить модератору
 Re: VIEW и TOP  [new]
Glory
Member

Откуда:
Сообщений: 104751
InterventXXX
И вообще, не понятно откуда столько негатива

Из-за ваших категоричных выводов

InterventXXX
желание по-моему весьма пристойное, особенно когда база растет, а клиентское приложение исправить нельзя!

Вам предлагают исправить сервеные объекты
21 май 13, 13:05    [14326254]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить