SELECT FIRST("Id")
FROM "tblMV"
WHERE "Name" = :"Name"
INTO :"Id"
Дело в том что одинаковому Name могут соответствовать несколько (а их на самом деле очень много) различных "Id" а мне нужно чтобы выбрав первую подходящую запись запрос перестал читать остальные записи. Запрос написанный выше вполне логичен. Но беда в том, что Interbase ругается на то что не знает FIRST — что делать?
K_>Дело в том что одинаковому Name могут соответствовать несколько (а их на самом деле очень много) различных "Id" а мне нужно чтобы выбрав первую подходящую запись запрос перестал читать остальные записи. Запрос написанный выше вполне логичен. Но беда в том, что Interbase ругается на то что не знает FIRST — что делать?
SELECT FIRST 1 Id
FROM tblMV
WHERE Name = :Name
INTO :Id
Здравствуйте, 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 ...)
Здравствуйте, 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"
Такой синтаксис действительно поддерживается 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
Опс, а где ты такой Ленгвич референс взял? У меня есть только от 6 и тот неполный, там про РОУС ничего не говориться
Если не сложно, кинь мне на мыло, пожалуйста darkgreen@fermak.kz