Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

Запрос из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.053 c
2-1208786099
Int23
2008-04-21 17:54
2008.05.18
Нужна функция рекурсивного каталога и всех вложенных в него


2-1208350222
Апостля
2008-04-16 16:50
2008.05.18
буфер. ричедит.


15-1207403489
TIF
2008-04-05 17:51
2008.05.18
Подскажите, а то фантазия даёт сбой :-(


2-1208620176
MSD
2008-04-19 19:49
2008.05.18
FTP


15-1207544272
Игорь Шевченко
2008-04-07 08:57
2008.05.18
McSimm, с днем рождения!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский