Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/05/2012, 08:42
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 7 meses
Puntos: 447
Respuesta: Datos de dos tablas que no tienen nada entre sí

Hola de nuevo jinno2323:

A ver, tratemos de resolver las dudas que tienes:

PRIMERO:

Cita:
y la consulta de ejemplo con UNION que me has mostrado, no coinciden los campos del ejemplo con los de la búsqueda:
Tal como te comenté en el primer post, cuando utilizas una consulta UNION es importante que el NUMERO de campos en los selects sea el mismo, es decir, no puede hacer algo como esto:

Código:
SELECT campo FROM tabla1
union
SELECT campo, campo2 FROM tabla2
Observa detenidamente la estructura de las tablas que pongo de ejemplo... NO TIENEN EL MISMO NUMERO DE CAMPO, por lo tanto hacer un select * queda descartado, pues las consultas no tendrían el mismo numero de campos.

Ahora observa la consulta resultante:

Código:
SELECT 'cancion' tabla, titulo
......
SELECT 'foto' tabla, titulo_foto
......
Observa que en ambas consultas SE ESTÁN REGRESANDO DOS CAMPOS, el primero que sería una CONSTANTE y ya oscartt67 comenta acertadamente:

Código:
es un string para que sepas de que tabla proviene, 
y 'tabla', es un alias, un nombre con que identificar la columna
.
SEGUNDO:

Cita:
para hacer un ORDER BY tengo que ponerlos entre paréntesis cada SELECT
Ojo con el ORDER BY... este varía su comportamiento de acuerdo a cómo lo colocas... puedes ponerlo en cada subconsulta:

Código:
(SELECT .....
ORDER BY campo)
UNION
(SELECT .....
ORDER BY campo)
Colocado de esta forma ORDENA CADA SUBCONSULTA de manera independiente y después realiza la unión... Sin embargo también puedes poner un ORDER BY GENERAL:

Código:
SELECT .....
UNION
SELECT .....
ORDER BY campo
En este caso, al no poner paréntesis PRIMERO SE REALIZA LA UNIÓN y después se realiza la ordenación del resultado de la unión. Aquí depende de cómo quieras mostrar tu información.

TERCERO:

Cita:
¿Tenga que tener el mismo número de campos y su tipo (¿columna te refieres?) debe ser el mismo?
Es recomendable que verifiques que los campos tengan el mismo tipo o un tipo compatible, ya que de lo contrario puede ocasionar errores:

Código:
Select CampoA_Date, CampoA_Varchar, CampoA_Otro...
UNION
Select CampoB_Date, CampoB_Varchar, CampoB_Otro...
Observa que la correspondencia de los tipos de columna debe ser la misma (CampoA_Date = CampoB_date). MySQL realiza algunas conversiones implícitas, pero es recomendable siempre verificar los tipos de manera manual:

CUARTO:

Cita:
si los campos son diferentes, es decir, si en la tabla de canciones los títulos se guardan en la columbra "nombre_cancion" y en la tabla de fotos los títulos se guardan en la columna "nombre_foto", como puedo mostrarlos luego en pantalla.
No importa si tienen un nombre diferente, LO IMPORTANTE ES EL TIPO. Por defecto se asigna como alias EL NOMBRE DE CAMPO DE LA PRIMER TABLA... de hecho, si observas en el ejemplo yo estoy realizando la unión entre dos campos QUE NO TIENEN EL MISMO NOMBRE:


Código:
SELECT 'cancion' tabla, titulo
...
UNION
SELECT 'foto' tabla, titulo_foto
...
Observa también que en el resultado de salida se asigna como nombre de columna el de la primer tabla:

Código:
+---------+---------------------+
| tabla   | titulo              |
+---------+---------------------+
Pero si no quieres esto, PUEDES ASIGNARLE EL ALIAS QUE TU QUIERAS para dejar la misma descripción en las dos consultas_

Código:
SELECT 'cancion' tabla,  titulo esto_es_un_alias
...
UNION
SELECT 'foto' tabla, titulo_foto esto_es_un_alias
...
Espero que con esto te quede un poco más claro el panorama y si como dices, eres novato pues no te queda otra más que leer y seguir investigando.

Saludos
Leo.