Eu tenho a seguinte consulta:
SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM
calls, telephone
WHERE calls.from_t_no = telephone.t_no
AND
calls.duration <=60
group by telephone.cust_id, telephone.cust_name
Que dão os seguintes resultados;
cust_id cust_name duration
0123456789 Avi 18
1234567890 Benny 27
2345678901 Gadi 13
3456789012 Dalia 69
4567890123 Hilla 5
5678901234 Varda 14
7890123456 Haim 20
8901234567 Tali 20
9012345678 Yoram 46
Eu também tenho essa consulta:
SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM calls ,telephone
WHERE to_t_no = telephone.t_no
AND
calls.duration >=500
group by telephone.cust_id, telephone.cust_name
Que fornece os seguintes resultados:
cust_id cust_name duration
2345678901 Gadi 50022
4567890123 Hilla 50000
a segunda consulta é na verdade outro filtro oucondição que a primeira consulta deve corresponder. Não consigo incluir a segunda consulta na primeira consulta porque ela usa colunas diferentes. Eu preciso "subtrair" a segunda consulta da primeira consulta.
Como faço isso?
Respostas:
0 para resposta № 1Se você realmente pode mesclar as consultas, você pode juntar os resultados como este:
SELECT T0.cust_id, T0.cust_name, T0.duration FROM
( SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM
calls, telephone
WHERE calls.from_t_no = telephone.t_no
AND
calls.duration <=60
group by telephone.cust_id, telephone.cust_name) T0
JOIN
(SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM calls ,telephone
WHERE to_t_no = telephone.t_no
AND
calls.duration >=500
group by telephone.cust_id, telephone.cust_name) T1
ON T0.cust_id = T1.cust_id
0 para resposta № 2
Tente postar a estrutura completa da sua mesa e descreva o que você realmente precisa.
Se eu entendi corretamente o problemaas condições que você está expondo são mutuamente exclusivas. Eu acho que não é possível que qualquer registro corresponda às duas condições porque a consulta final ficará assim:
SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM calls ,telephone
WHERE
to_t_no = telephone.t_no
AND calls.from_t_no = telephone.t_no
AND calls.duration <=60
AND calls.duration >=500
group by telephone.cust_id, telephone.cust_name;
Se o que você quer é uma solução geral para fazer uma "consulta sobre uma consulta" você pode usar esse tipo de sentença:
SELECT field1, field2 FROM
(SELECT field1, field2, ..., fieldn FROM table WHERE condition) AS filteredTable
WHERE anyCondition;