SQL присоединяется по многим запросам - PullRequest
0 голосов
/ 13 октября 2009

У меня есть таблица со структурой, такой как таблица (PK, a, b, c, d, e, f, g).

И у меня много запросов, к которым я хочу присоединиться:

select PK, sum(c) where...

JOIN

select PK, sum(e) where...

JOIN

select PK, sum(g) where ...

JOIN

 select PK,a,b,d,f

Каждая сумма (c | e | g) на самом деле является

select sum(c|e|g) from .... where...

потому что здесь много условий (не все c | e | g должны быть добавлены)

Это лучший способ сделать это? Мне предложили написать его на PL / SQL, который мне пришлось бы изучить. Если это путь, я сделаю это, но я не уверен, что не так с решением, показанным выше.

Редактировать

Я уверен, что это Присоединение. Вот что я хочу.

Мне нужно получить набор результатов в виде:

PK, a,b,COMPLEX_SUM_ON_C,d,COMPLEX_SUM_ON_D,f,COMPLEX_DUM_ON_G

поэтому я подумал о том, чтобы объединить множество запросов, чтобы получить этот результат.

Каждый из КОМПЛЕКСА ... это другой выбор (выберите сумму ...). Это очень большой стол, и написание

select a,b,(select sum..),d,(select sum...),f,(select sum...)

даст плохую производительность (поэтому мне сказали, чтобы удалить его)

Я редактировал мой запрос выше.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 13 октября 2009

Я думаю, что вы имеете в виду "UNION", а не "JOIN". Наилучший способ зависит от того, чего вы пытаетесь достичь.

2 голосов
/ 13 октября 2009

Это не вполне определенная проблема (пока).

Если предположить, что PK является вашим первичным ключом (т. Е. Уникальным по определению), то

SELECT PK, SUM(c)
FROM tbl
GROUP BY PK

равно ВСЕГДА так же, как

SELECT PK, c
FROM tbl

Таким образом, группирование (и агрегирование) относительно бессмысленно.

В ваших ожидаемых результатах:

PK, a,b,COMPLEX_SUM_ON_C,d,COMPLEX_SUM_ON_D,f,COMPLEX_DUM_ON_G

Как COMPLEX_SUM_ON_C, COMPLEX_SUM_ON_D, COMPLEX_DUM_ON_G связаны с ПК?

Мы знаем, как a, b, d, f связаны с PK, потому что для каждого PK можно идентифицировать один и только a, b, d, f в одной строке.

2 голосов
/ 13 октября 2009

Примером JOIN является следующий:

Select a.col1, b.col2
FROM table1 a, table2 b
WHERE a.key = b.key;

, который также может быть написан:

SELECT a.col1, b.col2
FROM table1 a
INNER JOIN table2 b
ON a.key = b.key;

Edit:

После прочтения вашего повторного редактирования исходного вопроса вы, вероятно, можете использовать JOIN. Соединения могут использоваться, когда у вас есть связанные данные в более чем одной таблице, или вы можете указать одну и ту же таблицу несколько раз. Я использовал оба вида с Oracle. Вот пример последнего типа, который, надеюсь, поможет вам:

SELECT t1.a, t1.b, t3.sum(c), t2.d, t4.sum(e), t1.f, t5.sum(g)
FROM table1 t1, table1 t2, table1 t3, table1 t4, table1 t5
WHERE  t1.a = 'hello'
AND t2.a = 'world'
AND t3.c = 10
AND t4.e = 20
AND t5.g = 100
GROUP BY t1.a, t1.b, t2.d, t1.f;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...