2016-04-19 3 views
0
SELECT 
    tableA.col1, 
    tableA.col2, 
    LEFT(tableB.col3, 4) as person 

FROM tableA 

LEFT JOIN tableB ON 

    tableB.col1 = tableA.col1 AND 
    tableB.col2 = tableA.col2 

WHERE tableA.col3 = '000000' 

AND tableA.col4 <> '' 

AND person = 'Zeus' 

ORDER BY tableA.col1, tableA.col4 ASC; 

--- 

col1   col4  person 
001   abc   Zeus 
002   abc   Zeus 
003   xyz   Zeus 
004   xyz   Zeus 

+Нужна помощь объединения SQL запросов

SELECT 
    tableC.col1, 
    SUM(tableC.col2) as cost 

FROM tableC 

WHERE tableC.col3 = 'L' 

GROUP BY tableC.col1, tableC.col3; 

--- 

col1   cost 
001   23462 
002   25215 
003   92381 
004   29171 

=

col1   col4   person   cost 
001   abc   Zeus   23462 
002   abc   Zeus   25215 
003   xyz   Zeus   92381 
004   xyz   Zeus   29171 

Как мне это сделать? Я попытался поместить второй запрос в качестве вложенного select в верхнем, но я не мог заставить его работать. Оба набора результатов имеют одинаковые значения col1, которые уникальны, поэтому, я думаю, они должны быть объединены в это? И в конечном итоге person - это то, где запрос будет отличаться при каждом его запуске.

ответ

1

Вы можете попробовать внутреннее соединение на col1

SELECT tableA.col1, tableA.col2, LEFT(tableB.col3, 4) as person, tableC.col1, SUM(tableC.col2) as cost 
FROM tableA 
LEFT JOIN tableB ON (tableB.col1 = tableA.col1 AND tableB.col2 = tableA.col2) 
INNER JOIN tableC ON (tableA.col1 = tableC.col1) 
WHERE tableA.col3 = '000000' 
AND tableA.col4 <> '' 
AND person = 'Zeus' 
GROUP BY tableA.col4, person, tableC.col1, tableC.col3; 
ORDER BY tableA.col1, tableA.col4 ASC; 
+0

Спасибо, отлично работает. – Slime

1

Если вы не хотите, сочетающее ваши вопросы вы можете задать псевдоним для запросов, как этот запрос

select * from example ... as table1; 

и у вас есть выбор результат в таблице1, чтобы вы могли указать псевдоним для своего другого выбора в своем вопросе.

SELECT 
    tableC.col1, 
    SUM(tableC.col2) as cost 

FROM tableC 

WHERE tableC.col3 = 'L' 

GROUP BY tableC.col1, tableC.col3 as table2 

Теперь вы можете se или другие команды в таблице 1 и таблице в вашем ответе

join can give you preffered result. 
SELECT 
    table1.*, 
    table2.* 
FROM table1 
JOIN table2 ON 
    table1.col1 = table2.col1 
ORDER BY table1.col1 
+0

Я никогда не знал, что вы можете задать псевдоним по запросу! Это будет очень полезно в ближайшем будущем. Спасибо много. – Slime

Смежные вопросы