Форум: "Начинающим";
Текущий архив: 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