Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/09/2011, 12:11
Avatar de Ribon
Ribon
 
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Problemas con subconsulta

En realidad lo que estás haciendo tu es una ensalada con la multiplicación cruzada de las 2 tablas.

Lamentablemente la solución a tu problema es una de las queries temerosas que nunca nadie quiere enfrentar por la inefisciencia que esta presenta, esta solución solo te la recomiendo si ambas tablas no son grandes, porque además las tablas están en bases de datos distintas lo que lo hace peor xD!.

bueno acá va

SELECT bd1.empresas1.id, bd1.empresas1.empresa
FROM bd1.empresas1, bd2.empresas2
WHERE bd2.empresas2.id!=bd1.empresas1.id ORDER BY bd1.empresas1.empresa

Código MySQL:
Ver original
  1. SELECT bd1.empresas1.id, bd1.empresas1.empresa
  2. FROM bd1.empresas1
  3. bd1.empresas.id NOT IN (SELECT bd2.empresas2.id FROM bd2.empresas2);
  4. ORDER BY bd1.empresas1.empresa;


Si no estás haciendo las queries directamente en la base de datos puedes apoyarte con variables en una aplicación para almacenar el listado de ids de la empresas2 y no tener que hacer el select para comparar cada vez:

ejemplo en pseudo codigo

Código PSEUDO-CODIGO:
Ver original
  1. var BD_IDS = QUERY("SELECT ids FROM bd2.empresas");
  2. IDS = UNIR_EN_STRING(BD_IDS); //esto para que quede en la forma 1,2,4,56,21,78,....... por ejemplo usando implode en PHP
  3.  
  4. //y despues haces la query
  5. var IDS_DISTINTOS = QUERY("SELECT id,empresa FROM bd1.empresas WHERE id NOT IN (IDS)");

eso es más efisciente porque hace la query para traer los IDS de la empresa 2 una sola vez.
en el otro caso hace un SELECT por cada ID de la empresa 1.

Espero te sirva de ayuda ;)