Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Выборка из трех таблиц / 4 сообщений из 4, страница 1 из 1
17.09.2014, 00:07
    #38748576
Выборка из трех таблиц
Доброго времени суток!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE contracts (
      code TEXT NOT NULL default '' COLLATE NOCASE,
      first_name TEXT NOT NULL default '' COLLATE NOCASE,
      last_name TEXT NOT NULL default '' COLLATE NOCASE
);

CREATE TABLE periods (
      contract_id INT NOT NULL default '0', 
      date_from REAL NOT NULL default '0.00', 
      date_to REAL NOT NULL default '0.00', 
      amount REAL NOT NULL default '0.00'
);

CREATE TABLE payments (
      contract_id INT NOT NULL default '0', 
      amount REAL NOT NULL default '0.00'
);



где:

periods.contract_id <-> contracts.rowid
payments.contract_id <-> contracts.rowid

Ноль или несколько записей в таблицах periods и payments могут соответствовать одной записи в таблице contracts.

Требуется получить выборку из полей:

contracts.rowid
contracts.code
contracts.first_name
contracts.last_name
min_date (наименьшее значение periods.date_from, где periods.contract_id = contracts.rowid)
max_date (наибольшее значение periods.date_to, где periods.contract_id = contracts.rowid)
sum_amount (суммарное значение periods.amount, где periods.contract_id = contracts.rowid)
sum_payment (суммарное значение payments.amount, где payments.contract_id = contracts.rowid)

Поля min_date, max_date, sum_amount, sum_payment должны быть равны нулю, если нет соответствующих записей в таблицах periods или payments.

Заранее благодарю за помощь в написании запроса.
...
Рейтинг: 0 / 0
17.09.2014, 00:21
    #38748581
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из трех таблиц
...
Рейтинг: 0 / 0
17.09.2014, 06:40
    #38748660
Выборка из трех таблиц
Дениска Рохлин,

читать про OUTER JOIN-ы до полного просветления.
заодно глянуть GROUP BY и derived table (inline view, select from select, etc.)
...
Рейтинг: 0 / 0
17.09.2014, 18:43
    #38749577
Выборка из трех таблиц
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT 
    t1.rowid, 
    t1.code, 
    t1.first_name, 
    t1.last_name, 
    MIN(t2.date_from) AS min_date, 
    MAX(t2.date_to) AS max_date,
    SUM(t2.amount) AS sum_amount,  
    (SELECT SUM(amount) AS sum_payment FROM payments AS t3 WHERE t3.contract_id = t1.rowid) 
FROM
    contracts AS t1 
LEFT OUTER JOIN 
    periods AS t2 
ON 
    t1.rowid = t2.contract_id 
GROUP BY 
    t1.rowid;

Не уверен, что все делаю правильно и нет более рационального решения, но вроде бы работает.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Выборка из трех таблиц / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]