Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta SELECT facil pero que no me sale!!

Estas en el tema de Consulta SELECT facil pero que no me sale!! en el foro de Mysql en Foros del Web. Tengo una tabla llamada PROVINCIAS y otra llamada PUEBLOS: PROVINCIAS ----------- id_provincia (int) (Clave primaria) nombre_provincia (varchar) PUEBLOS ------------ id_pueblo (int) (Clave primaria) provincia (int) ...
  #1 (permalink)  
Antiguo 19/09/2005, 11:34
Avatar de kazafun  
Fecha de Ingreso: diciembre-2003
Ubicación: Elda
Mensajes: 843
Antigüedad: 20 años, 3 meses
Puntos: 13
Consulta SELECT facil pero que no me sale!!

Tengo una tabla llamada PROVINCIAS y otra llamada PUEBLOS:


PROVINCIAS
-----------
id_provincia (int) (Clave primaria)
nombre_provincia (varchar)



PUEBLOS
------------
id_pueblo (int) (Clave primaria)
provincia (int) (Clave ajena -> apunta a id_provincia)
nombre_pueblo (varchar)




TAN SOLO quiero una tabla en la que para CADA provincia obtenga el NUMERO de pueblos correspondiente:
Osea lo siguiente:

SELECT nombre_provincia, count( * )
FROM PROVINCIAS, PUEBLOS
WHERE id_provincia = provincia
GROUP BY (id_provincia)


(Con un resultado, por ejemplo:)

ALICANTE 5
BARCELONA 7
MADRID 7
CADIZ 3

Siendo cada numero el total de pueblos...

Pero esto me muestra solo las provincias y el numero de pueblos que esten definidos para cada provincia, pero
si no se han definido pueblos para, por ejempo MALAGA, dicha provincia NO APARECERA en el resultado y YO lo que quiero
es precisamente ESO, que APAREZCA MALAGA aunque no tenga PUEBLOS!!! (Ejemplo de lo que yo querria:)

ALICANTE 5
BARCELONA 7
MADRID 7
CADIZ 3
MALAGA 0
CASTELLON 0
. .
. .
. .



Ayudadme y gracias!!!!!! (Acabo de probar a hacer un
WHERE id_provincia = provincia OR provincia=NULL pero tampoco me funciona, sigue sin mostrar los registros que no han sido referenciados desde la tabla PUEBLOS)
  #2 (permalink)  
Antiguo 19/09/2005, 11:53
Avatar de ADIÓS_ADRIANA  
Fecha de Ingreso: septiembre-2005
Mensajes: 263
Antigüedad: 18 años, 7 meses
Puntos: 0
Hola,

Fíjate que yo muestro una tabla de proveedores y si algún proveedor no tiene fax, le asigno un mensaje "no tiene fax"

Se hace de la siguiente Manera:

Código PHP:
select citycountry
phone, if (CHAR_LENGTH(fax)>0,fax,'no tiene fax') as fax from provider 
Adápatalo a tu consulta, quisiera ayudarte más pero solo sé algunas cosillas.

Espero que lo soluciones.

Saludos.
  #3 (permalink)  
Antiguo 19/09/2005, 12:16
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
Si estas utilizando MySql leete en el Manual el apartado de LEFT JOIN que te muestra todo la tabla principal aunque no tenga dependientes ya que al hacer INNER JOIN solo te muestra los que tienen dependientes.

Si estas utilizando Oracle en la parte de referencia puedes ocupar la sintaxis (+) en la parte de definicion de la segunda tabla (la tabla hija)
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #4 (permalink)  
Antiguo 19/09/2005, 14:03
Avatar de claray  
Fecha de Ingreso: agosto-2004
Ubicación: ahora... en Caracas
Mensajes: 345
Antigüedad: 19 años, 8 meses
Puntos: 0
Hola,
tal como dice Linterns, este codigo de abajo debiera funcionar en cualquier manejador.


SELECT provincias.nombre_provincia, count( * )
FROM PROVINCIAS LEFT JOIN PUEBLOS on pueblos.provincia=provincias.id_provincia
GROUP BY (procincias.id_provincia)

espero no haberme pelado en nada, ya que lo escribo y no le he probado. :)

Saludos y suerte
__________________
:pirata: El arte de desarrollar es dejar que los otros lo hagan
  #5 (permalink)  
Antiguo 19/09/2005, 14:13
Avatar de JoseGCB  
Fecha de Ingreso: noviembre-2004
Ubicación: Caracas Venezuela
Mensajes: 91
Antigüedad: 19 años, 5 meses
Puntos: 0
con esto lo puedes solucionar intentalo
esto es para sql server
SELECT Tabla1.nombre, COUNT(Tabla2.id) AS Expr1
FROM Tabla1 LEFT OUTER JOIN
Tabla2 ON Tabla1.ida = Tabla2.id
GROUP BY Tabla1.nombre
  #6 (permalink)  
Antiguo 24/09/2005, 02:03
Avatar de kazafun  
Fecha de Ingreso: diciembre-2003
Ubicación: Elda
Mensajes: 843
Antigüedad: 20 años, 3 meses
Puntos: 13
Muchas gracias a todos. En efecto utilizar LEFT JOIN era la solucion. Duda resuelta.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:33.