2015-11-09 3 views
1

Я пытаюсь объединить эти два подзапроса (я думаю, что это так называется), где имя ветки первого запроса равно имени ветки второго запроса.SQL INNER JOINING 2 Подзапросы

Однако они, похоже, не хотят объединяться, и с моими ограниченными знаниями SQL я не могу найти способ исправить это. Я пробовал перемещать скобки на всех позициях, но это тоже не понравилось.

SELECT * 
FROM 
(
SELECT B.branchName, A.type, AVG (T.amount), COUNT(A.accNumber) 
FROM Branch B, Account A, Transactions T 
WHERE 
    B.branchNumber = A.branchNumber AND 
    A.accNumber = T.accNumber 
GROUP BY B.branchName, A.type 
) 

INNER JOIN 

(
SELECT B1.branchName, COUNT(A1.accNumber) 
FROM Account A1, Branch B1 
WHERE 
     A1.branchNumber = B1.branchNumber 
GROUP BY B1.branchName 
HAVING COUNT(A1.accNumber) > 5 
) 
ON 
B.branchName = B1.branchName 
+0

Оба подзапросов должны иметь одинаковое число столбцов и те же типы данных – pablomatico

+1

@pablomatico - почему бы это? – Amit

+0

@pablomatico, что верно для обеих частей 'union', но не для' join' – Andomar

ответ

0

Для того, чтобы сделать работу запроса, вы должны назвать внутренние выбирает (суб-запросы):

SELECT * 
FROM 
(
SELECT B.branchName, A.type, AVG (T.amount), COUNT(A.accNumber) 
FROM Branch B, Account A, Transactions T 
WHERE 
    B.branchNumber = A.branchNumber AND 
    A.accNumber = T.accNumber 
GROUP BY B.branchName, A.type 
) q1 

INNER JOIN 

(
SELECT B1.branchName, COUNT(A1.accNumber) 
FROM Account A1, Branch B1 
WHERE 
     A1.branchNumber = B1.branchNumber 
GROUP BY B1.branchName 
HAVING COUNT(A1.accNumber) > 5 
) q2 
ON 
q1.branchName = q2.branchName 
+0

Второе предложение даст другой результат? В оригинале говорится: «Каждая группа (branchName) с более чем 5 accNumber», ваш предлагаемый запрос говорит «каждая группа (branchname, ** type **) с более чем 5 accNumber». – Andomar

+0

@Andomar - Ха! ты прав! Я был так смущен * нечитаемым * запросом :-) – Amit

+0

Ха-ха, извините за то, что он выглядел запутанным xD, просто начиная с SQL. Но спасибо вам большое! Я понятия не имел, что вам нужно было назвать внутренние выборки. – user4914034

1

Вы должны создать столбец имен для каждого суб-запроса. Попробуйте это:

SELECT * 
FROM 
(
    SELECT B.branchName, A.type, AVG (T.amount) AS [AVG], COUNT(A.accNumber) AS [COUNT] 
    FROM Branch B, Account A, Transactions T 
    WHERE 
     B.branchNumber = A.branchNumber AND 
     A.accNumber = T.accNumber 
    GROUP BY B.branchName, A.type 
) AS T1 
INNER JOIN 
(
    SELECT B1.branchName, COUNT(A1.accNumber) AS [COUNT] 
    FROM Account A1, Branch B1 
    WHERE 
     A1.branchNumber = B1.branchNumber 
    GROUP BY B1.branchName 
    HAVING COUNT(A1.accNumber) > 5 
) AS T2 
ON 
T1.branchName = T2.branchName 
+0

Зачем вам добавить этот ответ? это любой другой, чем мой (** уже принятый **) ответ? – Amit

+1

имя столбца псевдоним: COUNT (..) AS [COUNT] –