Инструкция FIRST в Interbase
От: Keeper_andrew Беларусь  
Дата: 26.05.04 13:20
Оценка:
Внутри хп нужно выполнить запрос

SELECT  FIRST("Id")
FROM "tblMV"
WHERE "Name" = :"Name"
INTO :"Id"


Дело в том что одинаковому Name могут соответствовать несколько (а их на самом деле очень много) различных "Id" а мне нужно чтобы выбрав первую подходящую запись запрос перестал читать остальные записи. Запрос написанный выше вполне логичен. Но беда в том, что Interbase ругается на то что не знает FIRST — что делать?
Re: Инструкция FIRST в Interbase
От: DemAS http://demas.me
Дата: 26.05.04 13:28
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

Могу ошибаться, но по моему First — это в Firebird.

Хотя могу ошибаться. В этом случае прошу прощения.
... << RSDN@Home 1.1.3 beta 2 >>
Re: Инструкция FIRST в Interbase
От: g_i  
Дата: 26.05.04 13:44
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

K_>Внутри хп нужно выполнить запрос


K_>
K_>SELECT  FIRST("Id")
K_>FROM "tblMV"
K_>WHERE "Name" = :"Name"
K_>INTO :"Id"
K_>


K_>Дело в том что одинаковому Name могут соответствовать несколько (а их на самом деле очень много) различных "Id" а мне нужно чтобы выбрав первую подходящую запись запрос перестал читать остальные записи. Запрос написанный выше вполне логичен. Но беда в том, что Interbase ругается на то что не знает FIRST — что делать?


SELECT  FIRST 1 Id
FROM tblMV
WHERE Name = :Name
INTO :Id
Re[2]: Инструкция FIRST в Interbase
От: Keeper_andrew Беларусь  
Дата: 26.05.04 15:36
Оценка:
Быстро протестировал вне ХП

SELECT FIRST 1 "MaterialValuableId", "ValuableName"
FROM "tblMaterialValuables"


Получил

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown — line 1, char 13.
1.
Re: Инструкция FIRST в Interbase
От: kavlad Россия http://www.wavesoft.ru
Дата: 26.05.04 15:52
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

Версия Interbase какая?
237135176
Re[3]: Инструкция FIRST в Interbase
От: AlexVinS Россия  
Дата: 27.05.04 04:31
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

K_>Быстро протестировал вне ХП


K_>
K_>SELECT FIRST 1 "MaterialValuableId", "ValuableName"
K_>FROM "tblMaterialValuables"
K_>


K_>Получил


K_>Invalid token.

K_>Dynamic SQL Error.
K_>SQL error code = -104.
K_>Token unknown — line 1, char 13.
K_>1.

Версия СУБД какая? Только FB такое поддердживает, и, возможно, свежий IB.


Умный человек знает не многое, но нужное
Re[3]: Инструкция FIRST в Interbase
От: g_i  
Дата: 27.05.04 05:40
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

K_>Быстро протестировал вне ХП


.....

K_>Получил

K_>Invalid token.
.....

А ну да .. Мы с IB давно на яфил перелезли, вот и не сообразил.
SELECT "MaterialValuableId", "ValuableName"
FROM "tblMaterialValuables"
WHERE ... AND Id = (SELECT MIN(Id) FROM "MaterialValuableId", "ValuableName"
FROM "tblMaterialValuables" WHERE ...)
Re[4]: Инструкция FIRST в Interbase
От: Keeper_andrew Беларусь  
Дата: 27.05.04 06:28
Оценка:
AVS>Версия СУБД какая? Только FB такое поддердживает, и, возможно, свежий IB.

IB 7.1
Re[5]: Инструкция FIRST в Interbase
От: kavlad Россия http://www.wavesoft.ru
Дата: 27.05.04 06:49
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

AVS>>Только FB такое поддердживает, и, возможно, свежий IB.


K_>IB 7.1


В его документации (и в 7.0 и в 6.5) о поддержке FIRST ничего не сказано -> Не поддерживает.
237135176
Re[5]: Инструкция FIRST в Interbase
От: Romkin  
Дата: 27.05.04 07:01
Оценка: -1
Здравствуйте, Keeper_andrew, Вы писали:

AVS>>Версия СУБД какая? Только FB такое поддердживает, и, возможно, свежий IB.


K_>IB 7.1


Там не first, а top вроде
Re[6]: Инструкция FIRST в Interbase
От: Keeper_andrew Беларусь  
Дата: 27.05.04 07:59
Оценка:
R>Там не first, а top вроде

Тож не работает. Может быть есть какая-нибудь команда которая остановит след цикл после получения первой строки?

FOR SELECT "MaterialValuableId", "ValuableName"
    FROM "tblMaterialValuables"
    INTO :"MaterialValuableId", :"ValuableName"
DO
BEGIN
   ??????
END
Re[4]: Инструкция FIRST в Interbase
От: Alfimov Россия  
Дата: 27.05.04 09:30
Оценка: +1
Здравствуйте, AlexVinS, Вы писали:

AVS>Версия СУБД какая? Только FB такое поддердживает, и, возможно, свежий IB.

Ну Yaffil тоже это поддерживает...
Re[7]: Инструкция FIRST в Interbase
От: dimitr Россия  
Дата: 27.05.04 09:34
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

R>> Там не first, а top вроде

K_>
K_> Тож не работает.

Блин, а в Language Reference заглянуть религия не позволяет, что-ли?

K_> FOR SELECT "MaterialValuableId", "ValuableName"
K_>     FROM "tblMaterialValuables"
K_>     INTO :"MaterialValuableId", :"ValuableName"
K_> DO
K_> BEGIN
K_>    ??????
K_> END


SELECT "MaterialValuableId", "ValuableName"
FROM "tblMaterialValuables"
ROWS 1
INTO :"MaterialValuableId", :"ValuableName"
Re: Инструкция FIRST в Interbase
От: kavlad Россия http://www.wavesoft.ru
Дата: 27.05.04 13:24
Оценка:
Здравствуйте, Keeper_andrew, Вы писали:

K_>Внутри хп нужно выполнить запрос


K_>
K_>SELECT  FIRST("Id")
K_>FROM "tblMV"
K_>WHERE "Name" = :"Name"
K_>INTO :"Id"
K_>


Такой синтаксис действительно поддерживается Firebird и Yaffil, а в IB начиная с 6.5 используется такая конструкция:

SELECT [TRANSACTION transaction]
[DISTINCT | ALL]
{* | val [, val …]}
[INTO :var [, :var …]]
FROM tableref [, tableref …]
[WHERE search_condition]
[GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]
[HAVING search_condition]
[UNION [ALL] select_expr]
[PLAN plan_expr]
[ORDER BY order_list]
[ROWS value [TO upper_value] [BY step_value][PERCENT][WITH TIES]]
[FOR UPDATE [OF col [, col …]]];


ROWS value
[TO upper_value]
[BY step_value]
[PERCENT][WITH TIES]
• value is the total number of rows to return if used by itself
• value is the starting row number to return if used with TO
• value is the percent if used with PERCENT
• upper_value is the last row or highest percent to return
• If step_value = n, returns every nth row, or n percent rows
• PERCENT causes all previous ROWS values to be
interpreted as percents
• WITH TIES returns additional duplicate rows when the last
value in the ordered sequence is the same as values in
subsequent rows of the result set; must be used in
conjunction with ORDER BY


Т.е. тебе надо написать что-то вроде
SELECT "Id"
FROM "tblMV"
WHERE "Name" = :"Name"
INTO :"Id"
ROWS 1
237135176
Re[8]: Инструкция FIRST в Interbase
От: Keeper_andrew Беларусь  
Дата: 27.05.04 13:25
Оценка:
Здравствуйте, dimitr, Вы писали:

D>
D>SELECT "MaterialValuableId", "ValuableName"
D>FROM "tblMaterialValuables"
D>ROWS 1
D>INTO :"MaterialValuableId", :"ValuableName"
D>


Работает.
Re[2]: Инструкция FIRST в Interbase
От: DarkGreen Казахстан  
Дата: 27.05.04 15:11
Оценка:
Здравствуйте, kavlad, Вы писали:

Поскипано....


Опс, а где ты такой Ленгвич референс взял? У меня есть только от 6 и тот неполный, там про РОУС ничего не говориться
Если не сложно, кинь мне на мыло, пожалуйста darkgreen@fermak.kz
Re[3]: Инструкция FIRST в Interbase
От: kavlad Россия http://www.wavesoft.ru
Дата: 28.05.04 05:13
Оценка:
Здравствуйте, DarkGreen, Вы писали:

DG>Если не сложно, кинь мне на мыло, пожалуйста darkgreen@fermak.kz


там
237135176
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.