Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.023 c
2-1208335672
Armond
2008-04-16 12:47
2008.05.18
Запрос


2-1208370567
Вопрос
2008-04-16 22:29
2008.05.18
Как составить сложный запрос ?


15-1207390437
@!!ex
2008-04-05 14:13
2008.05.18
Программирование под Mac OS X


2-1208427799
Виктор
2008-04-17 14:23
2008.05.18
Возможно ли проверить является окно модальным или нет?


2-1208707819
lewka-serdceed
2008-04-20 20:10
2008.05.18
имя создаваемого файла Word