![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 для таблиц и полей.