Текущий архив: 2008.05.18;
Скачать: CL | DM;
ВнизЗапрос из 4-х таблиц Найти похожие ветки
← →
zorik © (2007-12-07 15:10) [0]Есть 4 таблицы. Одна главная и три подчиненные:
Главная
CREATE TABLE T1 (
ID INTEGER NOT NULL
);
ALTER TABLE T1 ADD CONSTRAINT
PK_T1
PRIMARY KEY (ID);
CREATE TABLE K1 (
ID INTEGER NOT NULL,
IDT1 INTEGER NOT NULL
);
ALTER TABLE K1 ADD CONSTRAINT
PK_K1
PRIMARY KEY (ID);
ALTER TABLE K1 ADD CONSTRAINT
FK_K1_T1
FOREIGN KEY (IDT1) REFERENCES T1 (ID);
CREATE TABLE K2 (
ID INTEGER NOT NULL,
IDT1 INTEGER NOT NULL
);
ALTER TABLE K2 ADD CONSTRAINT
PK_K2
PRIMARY KEY (ID);
ALTER TABLE K2 ADD CONSTRAINT
FK_K2_T1
FOREIGN KEY (IDT1) REFERENCES T1 (ID);
CREATE TABLE K3 (
ID INTEGER NOT NULL,
IDT1 INTEGER NOT NULL
);
ALTER TABLE K3 ADD CONSTRAINT
PK_K3
PRIMARY KEY (ID);
ALTER TABLE K3 ADD CONSTRAINT
FK_K3_T1
FOREIGN KEY (IDT1) REFERENCES T1 (ID);
И данные:
таблица T1:
ID
0
таблица К1
ID IDT1
0 0
1 0
2 0
таблица К2
ID IDT1
0 0
таблица К3
ID IDT1
0 0
1 0
2 0
3 0
4 0
Приведенный ниже запрос возвращает "неверные" результаты. Скорее всего я неверно строю запрос.
select
T1.ID,
count(k1.id) count1,
count(k2.id) count2,
count(k3.id) count3
from t1
left join k1 on (k1.idt1=t1.ID)
left join k2 on (k2.idt1=t1.ID)
left join k3 on (k3.idt1=t1.ID)
group by
T1.ID
Скорее всего количевство считается только для таблици К1, а для остальных пишет везде нули.
Результат выполнения запроса:
ID COUNT1 COUNT2 COUNT3
0 3 0 0
← →
Johnmen © (2007-12-07 15:15) [1]Ты хвалишься или жалуешься?
← →
zorik © (2007-12-07 15:19) [2]чем здесь хвалится. думаю надо копать в сторону встроеных запросов...
← →
Johnmen © (2007-12-07 15:22) [3]Вообще то здесь не жалобная книга. ИМХО
← →
zorik © (2007-12-07 15:24) [4]тогда прошу натолкнуть как сие можна сделать
← →
Johnmen © (2007-12-07 15:25) [5]Что "сие"?
← →
zorik © (2007-12-07 15:32) [6]Скажем так есть, например таблица с полями id и дата. К ней привязаны еще несколько таблиц, например склад-1, склад-2, склад-3 и т.д. В них поля ID, код_главной_таблице(по нему и привязка), найменование товара и цена. Надо в одном запросе получить: дату, количество и сумму товаров по каждому из складов.
Пример утрированый. На самом деле структура таблиц "склад" разная.
← →
Sergey13 © (2007-12-07 15:34) [7]> [6] zorik © (07.12.07 15:32)
> Скажем так есть, например таблица с полями id и дата. К
> ней привязаны еще несколько таблиц, например склад-1, склад-
> 2, склад-3 и т.д.
Это пример ОЧЕНЬ неудачной структуры.
← →
Johnmen © (2007-12-07 15:37) [8]SELECT T1.*, (SELECT COUNT(*) FROM T2 ...), (SELECT COUNT(*) FROM T3 ...), ... FROM T1
Пример утрированый. На самом деле несколько сложнее.
:)
← →
Anatoly Podgoretsky © (2007-12-07 15:39) [9]> zorik (07.12.2007 15:32:06) [6]
Используй UNION
← →
zorik © (2007-12-07 15:42) [10]Ваши варианты:
В реально случае у меня на каждый период есть определенные затраты. В одном случае ето бурение скважин -- вводится глубина и название ("склад1"), во втором капитальные вложения -- найменование оборудования, количество и цена... Оптимальней структури не придумал:
период | Бурение Капвложения
| №скв | Глубина | Наим оборудования | Цена
-------------------------------------------------------
2001 | 10 | 3054 | сепаратор | 234 |
| трубы | 2578 |
2002 | | | ремонт | 10 |
2003 | 11 | 1025 | ремонт | 20 |
| 145 | 2104 |
| 10-р | 3000 |
← →
Johnmen © (2007-12-07 15:46) [11]
> zorik © (07.12.07 15:42) [10]
Ты серьезно считаешь, что мы должны быть в курсе бурения скважин и капитальных вложений, чтобы ответить на вопрос?
Кстати, а где сам вопрос то?
← →
zorik © (2007-12-07 15:54) [12]Да не надо быть в курсе. Из того что я наваял надо просумировать по периоде глубину и цену оборудования и посчитать количество скважин и оборудования. Бухгалтерский пример привести не могу придумать.
Одним словом из того что я наваял надо получить
2001 | 1 | 3054 | 2 | 2812
2002 | 0 | | 1 | 10
2003 | 3 | 6129 | 1 | 20
Пошел копать в сторону UNION
← →
Sergey13 © (2007-12-07 15:59) [13]> [10] zorik © (07.12.07 15:42)
> В реально случае у меня на каждый период есть определенные затраты.
Ну и сделай таблицу Затраты с классификацией. В ней хранить общие для всех затрат данные (наверняка есть такие, например сумма затраты). А вот расшифровку затрат, в зависимости от классификации, уже можно хранить в отдельных таблицах.
← →
Правильный_Вася (2007-12-07 16:11) [14]нифига не понял
вопроса нет
ожидаемого результата нет
одни жалобы
← →
Anatoly Podgoretsky © (2007-12-07 16:27) [15]И где тут заявленная дата, количество и сумма, ни одного из заявленых полей не видать. Это вообще не похоже на базу, более на какой то печатный отчет.
← →
Anatoly Podgoretsky © (2007-12-07 16:28) [16]> Sergey13 (07.12.2007 15:59:13) [13]
Похоже им нужен программист и постановщик.
← →
zorik © (2007-12-07 16:37) [17]Сделал. Всем спасибо. Извините. что не мог нормально объяснить :)
select
T1.ID,
(select count(k1.ID) from k1),
(select count(k2.ID) from k2),
(select count(k3.ID) from k3)
from
(t1
inner join k1 on (k1.IDT1=T1.ID)
inner join k2 on (k2.IDT1=T1.ID)
inner join k3 on (k3.IDT1=T1.ID)
)
group by
T1.ID
← →
zorik © (2007-12-10 09:57) [18]решил вопрос через ХП
← →
ЮЮ © (2007-12-10 10:22) [19]> решил вопрос через ХП
если типа твоего [17] zorik © (07.12.07 16:37) Сделал. Всем спасибо. Извините. что не мог нормально объяснить :)
то это называется через Ж...П... :)
Страницы: 1 вся ветка
Текущий архив: 2008.05.18;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.049 c