Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2017.07.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





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


1-1352499057
Tcount
2012-11-10 02:10
2017.07.23
ListView - текущее кол-во выделенных строк в режиме "Multiselect"


2-1428921020
Александр_2015
2015-04-13 13:30
2017.07.23
Oracle и InterBase не совместим запрос


8-1243261446
DoKi
2009-05-25 18:24
2017.07.23
Простой пример Glscene


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский