сформировать запрос

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

сформировать запрос

Сообщение парень » 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
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Re: сформировать запрос

Сообщение парень » 18 дек 2013, 12:18

по сути мне надо как то обьединить
SELECT id_val, SUM(summa) FROM ... GROUPBY id_val
и
SELECT id_val, summa, FROM... WHERE id_shet= xxx

голова взврывается... помогите
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: сформировать запрос

Сообщение trew » 18 дек 2013, 13:11

парень писал(а):по сути мне надо как то обьединить
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]
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Re: сформировать запрос

Сообщение парень » 18 дек 2013, 13:53

Спасибо... но... у меня одна таблица... почему B1 и B2...
ща попробую...
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Re: сформировать запрос

Сообщение парень » 18 дек 2013, 14:33

СПАСИБО работает !!! теперь только прикрутить замену id_valuta на ValName из таблицы Valuts...
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Re: сформировать запрос

Сообщение парень » 18 дек 2013, 15:17

Огромное спасибо, разобрался с Вашей помощью. эх... столько времени потерял...

пс. "FROM balans B1" - разве не так ? "FROM balans AS B1"
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: сформировать запрос

Сообщение Foenix » 18 дек 2013, 15:40

и так и так можно
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

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 для андроида...
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: сформировать запрос

Сообщение trew » 22 дек 2013, 17:05

парень писал(а):задача следующая.
есть две таблицы valuta
Скачай на торренте:Основы программирования и баз данных.
Не бывает SQL для android.
Читай любые книжки по любым базам данных (MySQL, MS SQL, SQLite, PL/SQL)
основы языка SQL, как правило, одинаковые.


Уже приводил пример, чтобы соединить две таблицы нужно использовать
INNER JOIN, LEFT JOIN (остальное пока вам не нужно).

А затем писать условие WHERE.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

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...

помоги крайний раз плз )
Последний раз редактировалось парень 22 дек 2013, 17:36, всего редактировалось 1 раз.
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: сформировать запрос

Сообщение trew » 22 дек 2013, 17:35

VAL._id IN (SELECT id_val FROM balansTemp)
или
VAL._id NOT IN (SELECT id_val FROM balansTemp)
смотря что нужно.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: сформировать запрос

Сообщение Foenix » 22 дек 2013, 20:39

парень писал(а): нужно вывести из первой таблицы 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/
имеются особенности в плане построения запросов. ОДнако, любой базовый учебник по базам данных подойдет.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить