Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 15 16 17 18 19 [20] 21 22 23 24 .. 54   вперед  Ctrl
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
WildSery,

ты устал. С чего бы это тоже самое?
Ты говоришь про векторные сравнения, а я про использование результатов коррелированных производных таблиц.
20 фев 18, 16:28    [21205604]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 760
KreatorXXI
Хочу запрос такого типа:
select a.field1, a.field2, a.field3,
         (
            select b.field1, b.field2, b.field3 
            from table2 b
            where b.id=a.id and ...      
         )
from table1 a

Может кто и упоминал, не помню. Естественно, простыми джойнами связать a и b не получается.


Я чего-то туплю. Мой убогий разум никак не может объединить "where b.id=a.id" и "простыми джойнами связать a и b не получается" в единую понятийную картину :(
20 фев 18, 17:04    [21205761]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 864
Симонов Денис,

Хорошо! Тогда и результат подзапроса можно будет сразу в конструкцию "where..." засунуть. Но, по-моему, Оракул поддерживает синтаксис, как я привёл. Могу ошибаться, давно не брал шашек в руки.
20 фев 18, 17:06    [21205770]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 760
Шавлюк Евгений
Есть некоторая неоднозначность использования
"select ... int ... " при использовании агрегатных функций

execute block
returns (text varchar(20), c int) as
begin
  text = null; c = null;
  select 'Text 1', 0 from rdb$database where false
  into text, c;
  suspend; -- Переменные не заполнены

  text = null; c = null;
  select 'Text 2', count(*) from rdb$database where false
  into text, c;
  suspend; -- А тут все в порядке
end


Это каунт, падлюка. Единственный из агрегатов, всегда что-нибудь да возвращающий, есть данные, нет данных...
20 фев 18, 17:06    [21205771]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 760
Старый плюшевый мишка
KreatorXXI
Хочу запрос такого типа:
select a.field1, a.field2, a.field3,
         (
            select b.field1, b.field2, b.field3 
            from table2 b
            where b.id=a.id and ...      
         )
from table1 a

Может кто и упоминал, не помню. Естественно, простыми джойнами связать a и b не получается.


Я чего-то туплю. Мой убогий разум никак не может объединить "where b.id=a.id" и "простыми джойнами связать a и b не получается" в единую понятийную картину :(


Жаль подредактировать нельзя. Если бы во вложенном селекте был first, то он, в смысле мой разум, добился бы своего. В смысле связал бы.
20 фев 18, 17:11    [21205793]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31047

20.02.2018 17:06, Старый плюшевый мишка пишет:
> Это каунт, падлюка. Единственный из агрегатов, всегда что-нибудь да возвращающий, есть данные, нет данных...

как оказалось, в данном контексте любой агрегат даёт фетч.
например:
SELECT 'Text', MAX(d.Rdb$description) FROM RDB$DATABASE d WHERE (1=2)


Posted via ActualForum NNTP Server 1.5

20 фев 18, 17:13    [21205799]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
Старый плюшевый мишка,

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

select a.f1, c.f2, c.f3
from a
lateral join (
  select b.f2, b.f3
  from b
  where a.f2 = b.f1
  order by b.bydate desc
  fetch first rows only
) c on true
20 фев 18, 17:16    [21205818]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 864
Старый плюшевый мишка,

Та же фигня, если использовать агрегаты. Например, сумму по количеству и сумму по деньгам. Одновременно.
20 фев 18, 17:34    [21205897]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Хотитель хотелок
Guest
Симонов Денис
тем что использовать эти переменные без переинициализации после выхода из блока FOR SELECT DO BEGIN ... END само по себе потенциальные грабли.

Неоднозначное утверждение.
Рождение, по статистике - основная причина смерти, а PSQL - ваще опасен для неофита.
Эта же конкретная хотелка - исключительно про удобство. Когда код завален кусками V1 = null; .. Vn = null; - он становится плохо читаемым. Пропустить одну из Vi - элементарно.
Когда код не читаем - отстрелить себе ногу намного проще даже зная все известные и потенциальные грабли.
20 фев 18, 19:36    [21206204]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
hvlad
Member

Откуда:
Сообщений: 10769
Хотитель хотелок
for select ....
into :V1..:Vn 


не изменит значений в переменных V1..Vn если запрос не вернёт ни одной строки.
И это так и останется.
20 фев 18, 21:12    [21206315]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Хотитель хотелок
Guest
hvlad
И это так и останется.

А по самОй хотелке?
20 фев 18, 21:53    [21206374]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6891
Хотитель хотелок
А по самОй хотелке?

у меня по самой идее пока нет критических возражений (хоть и не считаю это особо важным). Навскидку напрашивается синтаксис а-ля:

SELECT ... INTO :VAR1 DEFAULT NULL, :VAR2 DEFAULT NULL


но он не особо экономит пальцестучание по клаве.
21 фев 18, 09:04    [21206853]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4080
Про табличные переменные было?
Иногда бывают очень полезны.
21 фев 18, 09:33    [21206926]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6891
SQL2008
Про табличные переменные было?
Иногда бывают очень полезны.

передавать наружу из процедуры небось?
21 фев 18, 10:00    [21206997]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
hvlad
Member

Откуда:
Сообщений: 10769
dimitr
Хотитель хотелок
А по самОй хотелке?

у меня по самой идее пока нет критических возражений (хоть и не считаю это особо важным). Навскидку напрашивается синтаксис а-ля:

SELECT ... INTO :VAR1 DEFAULT NULL, :VAR2 DEFAULT NULL



но он не особо экономит пальцестучание по клаве.
Ни в коем случае.
Скорее уж нормальное "векторное" присваивание *перед* селектом:
(VAR1, VAR2, .., VARN) = (VAL1, VAL2, .., VALN)
21 фев 18, 10:37    [21207098]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
hvlad,

+ за векторные присваивания и сравнения
21 фев 18, 10:51    [21207148]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4080
dimitr
SQL2008
Про табличные переменные было?
Иногда бывают очень полезны.

передавать наружу из процедуры небось?

Нет.
Вытаскивать наружу данные изнутри откатанной транзакции, как пример.
21 фев 18, 11:05    [21207184]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
SQL2008,

откатанной
откаченной. Транзакции не катаются

и чем тебе табличные переменные помогут?
21 фев 18, 11:10    [21207204]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6891
SQL2008,

пример покажи на пальцах
21 фев 18, 11:11    [21207209]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4080
Симонов Денис
SQL2008,

откатанной
откаченной. Транзакции не катаются

Тогда и не откачиваются
Отроллбаченные! Так годится?

Симонов Денис
и чем тебе табличные переменные помогут?

1. Открывам транзакцию.
2. Помещаем данные в табличную переменную. Допустим, подготовленную из сложного запроса.
3. Записываем из табличной в некую таблицу в БД.
4. Ошибка при записи откатывает транзакции. Или сами откатываем по каким-то соображениям.
5. Смотрим на данные в табличной переменной, что в них не так.

Пример примитивен, но он показывает подход.
21 фев 18, 11:22    [21207264]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Шавлюк Евгений
Member

Откуда: Одесса
Сообщений: 501
Табличные переменные были бы удобны для передачи данных в ES (external db)
21 фев 18, 11:26    [21207290]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31047

граждане, а чем вам GTT не ананас?!

Posted via ActualForum NNTP Server 1.5

21 фев 18, 11:29    [21207307]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10378
SQL2008,

причём тут табличные переменные? Есть автономные транзакции + обычные таблицы или GTT уровня сессии. Всё легко реализуется

Шавлюк Евгений
Табличные переменные были бы удобны для передачи данных в ES (external db)


По мне так тут лучше придумать batch для ES
21 фев 18, 11:31    [21207313]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4080
Мимопроходящий
GTT

А у этих таблиц есть независимость от транзакций?
Если так, то снимаю свое предложение.
21 фев 18, 11:32    [21207318]     Ответить | Цитировать Сообщить модератору
 Re: Конкурс идей про Firebird  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4080
Симонов Денис
SQL2008,

причём тут табличные переменные? Есть автономные транзакции + обычные таблицы или GTT уровня сессии. Всё легко реализуется


Можете привести маленький пример?
1. Создать GTT, пусть будет одно текстовое поле.
2. Внести запись "Прав SQL2008"
3. Открыть транзакцию.
4. Проапдейтить GTT строкой "Прав Симонов Денис"
5. Откатить транзакцию.
6. Сделать SELECT * FROM GTT
21 фев 18, 11:36    [21207347]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 15 16 17 18 19 [20] 21 22 23 24 .. 54   вперед  Ctrl
Все форумы / Firebird, InterBase Ответить