Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/02/2012, 19:47
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: INNER JOIN de dos campos de mismo nombre

Cita:
pero si una de las tablas está vacia no me devuelve ningún valor y si ambas tienen me devuelve todo en una misma fila.

Mi pregunta es si se puede hacer para que lo muestre en filas contiguas para trabajar mas facilmente con ellas en PHP y como hacer para que me devuelva los datos aunque alguna de las tablas este vacia, se que se puede, se puede hacer que muestre como NULL las vacias pero no lo recuerdo y por mas que busco no doy con ello
Por lo que dices, necesitas estudiar un poco más de SQL, porque evidentemente no estás entendiendo la función de un JOIN, no digamos ya del INNER JOIN.
El JOIN tiene por objeto relaciona un registro dado de una tabla con uno o más registros de la otra; con ello se implica que siempre devolveráen un mismo registro todos los campos de ambas tablas donde se cumpla la condición del JOIN.
O sea que el que te lo esté devolviendo en un mismo registro es correcto, porque eso es lo que debe hacer.

Por otro lado, el INNER JOIN es la representación de la junta natural, por lo que sólo devuelve aquellos registros de la primera tabla que están efectivamente relacionados con un registro de la segunda. Por ello, el que una de ambas tablas esté vacía hace que no se devuelvan datos. Eso es así por definición, y no es un error.

Ahora bien, lo que tu estás tratando de lograr, según indicas, no es un JOIN sino un UNION, donde se devuelve una agregación de los registros de la primera tabla sumados a los de la segunda. Eso es otra operación completamente diferente y no tiene ning una vinculación con el JOIN.
Un UNION tiene como condición que ambos SELECT deben invocar a la misma cantidad de campos, en el mismo orden y del mismo tipo. Por ello, no puedes usar el asterisco para llamarlos (SELECT *...) a menos que ambas tablas tengan el la misma cantidad de campos, del mismo tipo y en el mismo orden.
Sería:
Código MySQL:
Ver original
  1. SELECT id, id_tutor, nombre
  2. FROM T1 p
  3. SELECT id, id_tutor, nombre
  4. FROM T2 a
Pero ten en cuenta que:
- Un UNION genera un DISTINCT implícito, por lo que no devolverá registros cuyos valores se repitan en forma completa entre ambas tablas.
- Todo ORDER BY o GROUP BY que se aplique al último SELECT afectará a toda la tabla devuelta.
- SI quieres que no elimine duplicados debes usar UNION ALL:

Código MySQL:
Ver original
  1. SELECT id, id_tutor, nombre
  2. FROM T1 p
  3. SELECT id, id_tutor, nombre
  4. FROM T2 a

Como dije, te conviene volver a repasar todos los temas de SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)