2015-01-26 5 views
0

У меня есть два запроса, которые я запускаю.MySQL - вывести результат одного запроса из результата другого

Вот они:

Первый запрос

SELECT SUM(dbase1.transaction.amount) AS total, dbase1.player.name 
FROM dbase1.transaction 
JOIN dev2.player ON dbase1.transaction.player_id = dbase1.player.player_id 
WHERE (dbase1.transaction.type !=1) 
AND (dbase1.transaction.type !=3) 
GROUP BY dbase1.transaction.player_id 
ORDER BY name ; 

И второй запрос

SELECT dbase2.transaction.amount 
, dbase2.transaction.player_id 
, dbase2.player.name 
FROM dbase2.transaction 
JOIN dbase2.player ON dbase2.transaction.player_id = dbase2.player.player_id 
WHERE dbase2.transaction.provider ='providerx'; 

В первом наборе результатов я получаю сумму и имя, в второй я получаю сумму, имя и идентификатор.

Я хочу, чтобы вычесть сумму из второго набора результатов из первого, где имена совпадают.

Так по существу мой окончательный результат будет:

amount from set1 - amount from set2, name, id 

Я надеюсь, что это имеет смысл, и любые советы будут оценены

Благодаря

ответ

0

Просто присоединиться к ним.

select a.total - b.amount from (
    select sum(dbase1.transaction.amount) 
    as total, dbase1.player.name from dbase1.transaction 
    JOIN dev2.player on 
    dbase1.transaction.player_id = dbase1.player.player_id 
    where 
    (dbase1.transaction.type !=1) 
    and 
    (dbase1.transaction.type !=3) group by dbase1.transaction.player_id 
) query_a a 
INNER JOIN 
(
    select dbase2.transaction.amount, dbase2.transaction.player_id, dbase2.player.name from dbase2.transaction 
    JOIN dbase2.player ON 
    dbase2.transaction.player_id = dbase2.player.player_id 
    where dbase2.transaction.provider ='providerx' 
) query_b b on a.name = b.name 
0

Вы можете использовать ваши два запроса, как производные таблицы и сделать это:

select 
    q1.total - q2.amount, q2.name, q2.player_id 
from (
    select 
     sum(dbase1.transaction.amount) as total, 
     dbase1.player.name 
    from dbase1.transaction 
    join dev2.player on dbase1.transaction.player_id = dbase1.player.player_id 
    where 
     (dbase1.transaction.type !=1) 
     and 
     (dbase1.transaction.type !=3) 
    group by dbase1.transaction.player_id 
    ) q1 
join (
    select 
     dbase2.transaction.amount, 
     dbase2.transaction.player_id, 
     dbase2.player.name 
    from dbase2.transaction 
    join dbase2.player on dbase2.transaction.player_id = dbase2.player.player_id 
    where dbase2.transaction.provider ='providerx' 
    ) q2 on q1.name = q2.name 
Смежные вопросы