Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.07.23;
Скачать: CL | DM;

Вниз

Oracle и InterBase не совместим запрос   Найти похожие ветки 

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

Есть запрос к БД 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-04-13 13:58) [1]

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


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

>Александр_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.


 
Ega23 ©   (2015-04-13 16:46) [3]

is not null


 
Ega23 ©   (2015-04-13 16:47) [4]

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

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


 
Александр_2015   (2015-04-13 17:24) [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 и возникли проблемы, там где не ожидали.


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

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


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

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


 
Кщд ©   (2015-04-13 18:38) [8]

>Александр_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-10-20 18:14) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2017.07.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.003 c
1-1351450806
ННН
2012-10-28 23:00
2017.07.23
Вывод всех перестановок k элементов из множества N имеющихся


3-1314244585
konrads
2011-08-25 07:56
2017.07.23
Ожидание завершения транзакции


3-1314177637
Gevs
2011-08-24 13:20
2017.07.23
вид курсора и процент поиска


2-1429109329
dis12345
2015-04-15 17:48
2017.07.23
Округление FormatFloat


2-1426949808
Neznajka
2015-03-21 17:56
2017.07.23
Как в TActionClient вместо кнопки поместить Edit