Страница 1 из 1
сформировать запрос
Добавлено: 18 дек 2013, 11:49
парень
Добрый день форумчане.
Видимо моя голова не созданна для сложных запросов в SQL.
есть таблица balans в виде:
_id id_valut id_schet summa
1 1 1 500
2 2 1 1000
3 1 2 5000
4 2 2 10000
нужен запрос на вывод инфы по id_shet=xxx(это легко получается) + мне нужно чтобы считалась общая сумма по id_valut и в этом же запросе...
пример1. из моей таблицы при запросе where id_shet=1
id_valut summa summaALL
1 500 5500
2 1000 11000
пример2. из моей таблицы при запросе where id_shet=2
id_valut summa summaALL
1 5000 5500
2 10000 11000
Заранее благодарен!!!
пс. ссылками не закидывайте, часов 6 уже изучаю
http://base.vingrad.ru/view/2871-Osnovyi-yazyika-SQL
Re: сформировать запрос
Добавлено: 18 дек 2013, 12:18
парень
по сути мне надо как то обьединить
SELECT id_val, SUM(summa) FROM ... GROUPBY id_val
и
SELECT id_val, summa, FROM... WHERE id_shet= xxx
голова взврывается... помогите
Re: сформировать запрос
Добавлено: 18 дек 2013, 13:11
trew
парень писал(а):по сути мне надо как то обьединить
SELECT id_val, SUM(summa) FROM ... GROUPBY id_val
и
SELECT id_val, summa, FROM... WHERE id_shet= xxx
голова взврывается... помогите
[syntax=sql]SELECT
B1.id_val, B1.summa, B2.summaALL
FROM balans B1
INNER JOIN
(SELECT id_val, SUM(summa) as summaALL FROM balans GROUP BY id_val) B2
ON B1.id_val = B2.id_val
WHERE B1.id_shet= xxx[/syntax]
Re: сформировать запрос
Добавлено: 18 дек 2013, 13:53
парень
Спасибо... но... у меня одна таблица... почему B1 и B2...
ща попробую...
Re: сформировать запрос
Добавлено: 18 дек 2013, 14:33
парень
СПАСИБО работает !!! теперь только прикрутить замену id_valuta на ValName из таблицы Valuts...
Re: сформировать запрос
Добавлено: 18 дек 2013, 15:17
парень
Огромное спасибо, разобрался с Вашей помощью. эх... столько времени потерял...
пс. "FROM balans B1" - разве не так ? "FROM balans AS B1"
Re: сформировать запрос
Добавлено: 18 дек 2013, 15:40
Foenix
и так и так можно
Re: сформировать запрос
Добавлено: 22 дек 2013, 15:28
парень
задача следующая.
есть две таблицы valuta
_id name
1 RUB
2 USD
3 EUR
4 CHN
...
и таблица balansTemp
_id id_val ...
1 1 ...
2 3 ...
3 4 ...
нужно вывести из первой таблицы valuta все строки где _id неравен id_val из таблицы balansTemp
например из данных таблиц должна вывестись только строка 2 (_id=2, name=USD)
пробую так:
Cursor c= mDB.rawQuery("SELECT name, _id FROM valuta WHERE _id<> ALL (SELECT id_val FROM balansTemp)", null);
выдает ощибку: (1) near "ALL": syntax error
если без ALL то строка "(SELECT id_val FROM balansTemp)" равна "1" и выводятся все строки кроме первой, а именно:
_id=2,name=USD
_id=3,name=EUR
_id=4,name=CHN
и дайте плз ссылку(если такая есть) на подробное описание запросов с множеством примеров SQL для андроида...
Re: сформировать запрос
Добавлено: 22 дек 2013, 17:05
trew
парень писал(а):задача следующая.
есть две таблицы valuta
Скачай на торренте:Основы программирования и баз данных.
Не бывает SQL для android.
Читай любые книжки по любым базам данных (MySQL, MS SQL, SQLite, PL/SQL)
основы языка SQL, как правило, одинаковые.
Уже приводил пример, чтобы соединить две таблицы нужно использовать
INNER JOIN, LEFT JOIN (остальное пока вам не нужно).
А затем писать условие WHERE.
Re: сформировать запрос
Добавлено: 22 дек 2013, 17:31
парень
trew писал(а):
Читай любые книжки по любым базам данных (MySQL, MS SQL, SQLite, PL/SQL)
основы языка SQL, как правило, одинаковые.
тогда почему мой запрос скопированный с сайта(Основы SQL) что по ссылке в первом моем посте не работает.
Многострочные операторы сравнения:
IN - Равно любому члену списка;
ANY - Сравнение значения с любым значением, возвращаемым подзапросом;
ALL - Cравнение значения с каждым значением, возвращаемым подзапросом.
Например:
WHERE Column >ALL (SELECT Field FROM Table)
разве это не правильно ? но ALL в таком контексте не признается SQLLite у меня...
укажи на ошибку плз.
Уже приводил пример, чтобы соединить две таблицы нужно использовать
INNER JOIN, LEFT JOIN (остальное пока вам не нужно).
А затем писать условие WHERE.
[/quote]
[syntax=sql]String table = "valuta as VAL " +
" inner join balansTemp as BAL on BAL.id_val = VAL._id";
String columns[] = { "VAL._id as _id","VAL.name as name" };
String groupBy = "";
String where="VAL._id= ALL (SELECT id_val FROM balansTemp)";
Cursor c = mDB.query(table, columns, where, null, groupBy, null, null)
[/syntax]
вот... если без WHERE то выдает только те позиции которые !не нужны. а если знак равенства (в inner join balansTemp as BAL on BAL.id_val = VAL._id) поменять на "<>" то выводит кучу повторений ВСЕХ позиций в valuta...
помоги крайний раз плз )
Re: сформировать запрос
Добавлено: 22 дек 2013, 17:35
trew
VAL._id IN (SELECT id_val FROM balansTemp)
или
VAL._id NOT IN (SELECT id_val FROM balansTemp)
смотря что нужно.
Re: сформировать запрос
Добавлено: 22 дек 2013, 20:39
Foenix
парень писал(а):
нужно вывести из первой таблицы valuta все строки где _id неравен id_val из таблицы balansTemp
и дайте плз ссылку(если такая есть) на подробное описание запросов с множеством примеров SQL для андроида...
запрос можно так написать
select * from valute where not exists
( select id_valute from balans where valute._id=balans.id_valute)
изучать нужнго следующий сайт
http://www.sqlite.org/
имеются особенности в плане построения запросов. ОДнако, любой базовый учебник по базам данных подойдет.