Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Oracle и InterBase не совместим запрос


Александр_2015 ©   (2015-04-13 13:30:00) 

Есть запрос к БД Oracle:
select (select text from kodif where tabl=1 and kod=istochnik), count(*) from firm
where god=2015 and not istochnik is null
group by istochnik

Таблица kodif - это просто кодификатор, где кодам соответствуют текстовые расшифровки. БД отвечает на запрос верно.
Повторили БД на InterBase. Получаем:

select istochnik, count(*) from firm
where god=2015 and not istochnik is null
group by istochnik
работает, а
select (select text from kodif where tabl=1 and kod=istochnik), count(*) from firm
where god=2015 and not istochnik is null
group by istochnik

выдает ошибку:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
ISTOCHNIK.

Если указать
select (select text from kodif where tabl=1 and kod=firm.istochnik), count(*) from firm
where god=2015 and not istochnik is null
group by istochnik

то получаю

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
invalid column reference.
Как получить правильный результат (как в БД Oracle)?


  (2015-10-20 18:14:00) [1]

Удалено модератором


Кщд   (2015-04-13 18:38:00) [2]

>Александр_2015   (13.04.15 17:24) [5]

>сделать с помощью join. Пример в студию, пожалуйста
азбучная истина - гуглите

>А вот так сработало:
это и есть join
возможно, Вам нужен left join (т.е., как раз таки внешнее объединение - зависит от того у каждого ли f.istochnik есть соответствие k.kod, при k.tabl=1)

>хотя мне такой запрос кажется менее правильным.
креститесь

>Александр_2015   (13.04.15 17:30) [7]
логически, это одно и то же


Александр_2015   (2015-04-13 17:30:00) [3]

PPS
not f.istochnik is null или f.istochnik is not null - результат не один и тот же?


Александр_2015   (2015-04-13 17:27:00) [4]

PS Формально запросом хотелось получить сколько закупок за текущий год сделали у разных поставщиков с разбивкой по этим самым поставщикам.


Александр_2015   (2015-04-13 17:24:00) [5]

А вот так сработало:
select k.text, count(*) from dtp d, kodif k
where not d.istochnik is null and k.tabl=1 and k.kod=d.istochnik
group by k.text

хотя мне такой запрос кажется менее правильным.

Таблицы очень просты. В одной дата поставки, источник поставки (код) и ещё ряд полей. И есть таблица кодификатор, где кодам противопоставляется расшифровка. Поля tabl, text, kod. Поле tabl=1 означает, что расшифровываем  коды, соответствующие поставщикам, в поле text получаем расшифровку (текстовое описание фирмы-поставщика), при условии что значение поля kod=istochnik. В Oracle всё работает на ура, но попытались сделать локальную версию на IB и возникли проблемы, там где не ожидали.


Ega23   (2015-04-13 16:47:00) [6]

select (select k.text from kodif k where k.tabl=1 and k.kod=f.istochnik), count(*) from firm f
where f.god=2015 and not f.istochnik is null
group by istochnik


group by f.istochnik

Тут что-то вообще бред какой-то идёт.
Давай структуру таблиц и что именно нужно выбрать. Словами.


Ega23   (2015-04-13 16:46:00) [7]

is not null


Александр_2015   (2015-04-13 14:30:00) [8]

>Александр_2015   (13.04.15 13:30)
1. написать join, а не то кошмарище, что сейчас;
2. ВСЕГДА использовать alias для таблиц и полей.

1.Я не волшебник, а только учусь. join - внешнее соединение двух таблиц, как оно поможет мне в данном случае? Мне нужно код одной таблицы в результате заменить на расшифровку этого кода из другой. Не представляю как это сделать с помощью join. Пример в студию, пожалуйста. Также хотелось бы понять в чем кошмарище?
2. Если запрос оформить в виде:

select (select k.text from kodif k where k.tabl=1 and k.kod=f.istochnik), count(*) from firm f
where f.god=2015 and not f.istochnik is null
group by istochnik

результат будет прежним:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
invalid column reference.


Кщд   (2015-04-13 13:58:00) [9]

>Александр_2015   (13.04.15 13:30)
1. написать join, а не то кошмарище, что сейчас;
2. ВСЕГДА использовать alias для таблиц и полей.


Наверх

Титульная страница Поиск, карта сайта Написать письмо