Форум: "Базы";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизТривиальный SQL-запрос Найти похожие ветки
← →
RomanH © (2006-07-28 11:57) [0]Доброго дня мастера.Имеется две таблицы
Table1:
T1_ID,T1_Tovar_ID,T1_price,T1_discount (по default=0.0)
и Table2:
T2_ID,T2_Tovar_ID,T2_price,T2_discount,T2_Firm_ID
То есть Table1-основной прайс-лист,а Table2 прайс-лист для каких то покупателей где мы можем определить скидку на какой либо товар. Делаю такой запросselect Table1.T1_Tovar_ID,
Table1.T1_Price,
Table1.T1_discount
from Table1
where not exists(select 1 from Table2
where Table2.T2_Tovar_ID=Table1.T1_Tovar_ID
and Table2.T2_Firm_ID=:Firm)
union
select Table2.T2_Tovar_ID,
Table2.T2_Price,
Table2.T2_discount
from Table2;
То есть этот запрос объеденяет два прайса но если есть запись во втором прайсе на какой-либо товар мы из первого не выбираем его.
Вопрос :Ни как не соображу,как сделать если Table2 T2_price=0 то надо выбрать из T1_price то есть
Как реализовать такую конструкцию
select Table1.T1_Tovar_ID,
Table1.T1_Price,
Table1.T1_discount
from Table1
where not exists(select 1 from Table2
where Table2.T2_Tovar_ID=Table1.T1_Tovar_ID
and Table2.T2_Firm_ID=:Firm)
union
select Table2.T2_Tovar_ID,
(if Table2.T2_price=0 then select Table1.T1_price
from Table1
where Table1.T1_Tovar_ID=Table2.T2_Tovar_ID)
Table2.T2_discount
from Table2
← →
ЮЮ © (2006-07-28 12:07) [1]where
not exists(
...
)
OR exists(
... AND Table2.T2_price=0
)
З.Ы. А почему бы такие записи не удалить? Если по нулевой цене продавать не хотите, как в прайсе объявлено?
← →
RomanH © (2006-07-28 12:14) [2]
> ЮЮ ©
В Table2 мы можем определить скидку на товар из Table2 либо назначить цену
← →
ЮЮ © (2006-07-28 12:16) [3]см.
http://delphimaster.net/view/3-1153450269/
Т.е. присоединяй обе таблицы, а там уж анализируй зпачение полей
← →
roottim © (2006-07-28 12:30) [4]может так ?
select
p.Tovar_ID,
max(p.Price) Price,
max(p.discount) discount
from (
select Table1.T1_Tovar_ID Tovar_ID,
Table1.T1_Price Price,
Table1.T1_discount discount
from Table1 union all
select Table2.T2_Tovar_ID Tovar_ID,
Table2.T2_Price Price,
Table2.T2_discount discount
from Table2 where Table2.T2_Firm_ID=:Firm
) p group by Tovar_ID
← →
PEAKTOP © (2006-07-28 13:31) [5]
> roottim © (28.07.06 12:30) [4]
Просветите темного, InterBase 7.5 поддерживает select from select ?
Я слышал, что этот о-ракловский наворот вроде появился только в Firebird 2.0. А про InterBase не слышал.
← →
roottim © (2006-07-28 13:43) [6]вид, поцедура доступны. Хотя я смотрю Language Reference IB6? может FB имеет иную отличительную особенность.
← →
PEAKTOP © (2006-07-28 16:29) [7]Вот-с, хочу выбрать все ТМЦ (TABL$R_TMC) и контрагнетов (TABL$R_CS) в один набор данных.
CREATE PROCEDURE DUMMY
RETURNS (
ID INTEGER,
NAME VARCHAR(255)
)
AS
BEGIN
FOR
SELECT ID, NAME
FROM (SELECT CS.ID, CS.NAME FROM TABL$R_CS CS
UNION ALL
SELECT T.ID, T.NAME FROM TABL$R_TMC T
)
INTO :ID, :NAME
DO
SUSPEND;
END
1) Ошибка препроцессора IBExpert (v2006-06-03)
select ... from (select ...) not supported
2) Если продолжаем компиляцию, ошибка Firebird (v1.5.3.4870)
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 10, char 13.
SELECT.
← →
PEAKTOP © (2006-07-28 16:31) [8]Собственно, почему меня и заинтересовала эта функция. В некоторых случаях очень не хватает.
← →
roottim © (2006-07-28 16:46) [9]с FB давненько не занимаюсь и попробоавть негде. Но может -
CREATE PROCEDURE DUMMY
RETURNS (
ID INTEGER,
NAME VARCHAR(255)
)
AS
BEGIN
FOR SELECT CS.ID, CS.NAME FROM TABL$R_CS CS INTO :ID, :NAME
DO
SUSPEND;
FOR SELECT T.ID, T.NAME FROM TABL$R_TMC T INTO :ID, :NAME
DO
SUSPEND;
END
← →
PEAKTOP © (2006-07-28 17:01) [10]
> с FB давненько не занимаюсь и попробоавть негде. Но может ....
А я, блин, вовек бы не догадался.....
Выше приведен пример того, что Firebird не поддерживает конструкцию select from select, вот я и хотел спросить, есть ли эта функция в InterBase.
Ответ сам уже нашел на SQL.RU:нет ее там и не было никогда. Может быть, в Vulcan появиться (Firebird-e 2.0). Говорят, есть вроде в Firacle (клон Firebird, а точнее - мутант, появившийся после скрещивания исходников Firebird и спецификации SQL для Oracle). Но я "уродцев" че-то не долюбливаю в виду непредсказумости поведения в нек. случаях.
В общем, зря я задал этот вопрос.... Всем спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.021 c