Tengo la siguiente declaración:

select region_id from regions
where region_name = 'Europe' 

Necesito la Salida de este en la instrucción siguiente, donde ‘bla’ es:

select count(*) from countries
where region_id = 'bla'

¿Cómo puedo hacer eso?

  • Cambió la consulta en nosotros! Lo que comenzó como distinct * y ahora es count(*) por lo tanto, por todas las respuestas están fuera de sincronización.
InformationsquelleAutor Display Name | 2011-09-01

3 Comentarios

  1. 3

    Subconsultas para el rescate!

    select distinct * 
    from countries
    where region_id=(select top 1 ir.region_id 
                     from regions ir
                     where ir.region_name = 'Europe' )

    Como alternativa, puede utilizar in y darle una lista de elementos devueltos por la consulta.

    • no hay TOP en Oracle
    • Puedes ver que, aún no se haya añadido un límite… me han echado a perder con MSSQL.
    • Yo todavía palo con MSSQL, aunque.
  2. 2

    Utilizando EXISTE:

    SELECT c.* 
      FROM COUNTRIES c
     WHERE EXISTS (SELECT NULL 
                     FROM REGIONS r
                    WHERE r.region_id = c.region_id
                      AND r.region_name = 'Europe')

    Mi preferencia es usar EXISTE más que EN porque:

    • IN en Oracle tiene un límite de 1.000 valores
    • EXISTS permite coincidir en más de una columna, si es necesario
    • EXISTS devuelve true en el primer partido, que puede ser más rápido que EN el/etc dependiendo de las necesidades de

    La mayoría de error EXISTS como una subconsulta correlacionada, pero se ejecuta de manera diferente & no evaluar la SELECT cláusula – usted puede probar usando:

    SELECT c.* 
      FROM COUNTRIES c
     WHERE EXISTS (SELECT 1/0
                     FROM REGIONS r
                    WHERE r.region_id = c.region_id
                      AND r.region_name = 'Europe')
    • No estoy seguro de que sus razones para preferir EXISTS más de IN son totalmente válidos. El límite de 1.000 valores con IN es sólo cuando se comparan a una lista de expresión y no de una subconsulta, IN va a trabajar con más de una columna, aunque la sintaxis es un poco torpe, y IN y EXISTS a menudo utilizan el mismo plan de ejecución, si es posible

Dejar respuesta

Please enter your comment!
Please enter your name here