Me dan el ID de target_service y analizar el parámetro y necesito encontrar otros datos con las siguientes instrucciones SQL

SELECT 
    Distinct TARGET_ID 
FROM 
    KB_OBJECT_PORTFOLIOS
WHERE 
    TARGET_SERVICE_ID=3780000000000220;

Ahora tengo el ID de destino = 3780000000000248

SELECT 
    count(*) AS COUNT 
FROM
    KB_OBJECT_PORTFOLIOS 
WHERE 
    TARGET_ID=3780000000000248
AND 
    PARSE_PARAM='bkey=5366349'

¿Puedo escribir todo esto como una declaración sql en lugar de hacer dos? Mi experiencia con selecciones anidadas es que son demasiado costosas en cuanto al tiempo que llevará. así que si tienes una solución con una unión, sería mejor.

Los resultados deberían verse como

TARGET_ID,       COUNT
3780000000000248, 1

Gracias

0
yankel 22 mar. 2017 a las 19:50

2 respuestas

La mejor respuesta

Si entiendo correctamente, ni siquiera necesitas unirte. Puede fusionar las dos condiciones (en TARGET_SERVICE_ID y en PARSE_PARAM) y seleccionar el recuento para cada TARGET_ID

select  TARGET_ID, count(*)
from    KB_OBJECT_PORTFOLIOS
where   TARGET_SERVICE_ID=3780000000000220 and
        PARSE_PARAM = 'bkey=5366349'
group by TARGET_ID
1
Stefano Zanini 22 mar. 2017 a las 16:55

¿Por qué necesitas dos consultas para esto? Si el primer SELECT le devuelve el TARGET_ID y dado que tanto TARGET_SERVICE_ID como TARGET_ID están en la misma tabla (KB_OBJECT_PORTFOLIOS), puede hacer algo como esto:

SELECT 
    count(*) AS COUNT 
FROM
    KB_OBJECT_PORTFOLIOS 
WHERE 
    TARGET_SERVICE_ID=3780000000000220
AND 
    PARSE_PARAM='bkey=5366349'
1
Razvan 22 mar. 2017 a las 17:00