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

Consulta Anidada

Estas en el tema de Consulta Anidada en el foro de Mysql en Foros del Web. Buenas a Todos, tengo un problemita, soy bastante novato en cuanto a SQL, y se me presenta el siguiente problema, tengo que extraer de 2 ...
  #1 (permalink)  
Antiguo 18/07/2008, 07:11
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Consulta Anidada

Buenas a Todos, tengo un problemita, soy bastante novato en cuanto a SQL, y se me presenta el siguiente problema, tengo que extraer de 2 tablas (Contacto, Organizaciones), ahora no tienen la misma cantidad de campos, y mi idea es sacar por ejemplo NOMBRE,APELLIDO, DIRECCION, CP, ahora en una sola consulta :
ORGANIZACIONES
id_organizacion
nombre
razon_social
direccion
cp
CONTACTOS
id_contacto
nombres
apllidos
direccion
cp

utilizo la siguiente consulta
(SELECT nombre,razon_social,direccion,poblacion,codigo_pos tal,ciudad from organizaciones)
UNION ALL
(SELECT nombres,apellidos,direccion,poblacion,codigo_posta l,ciudad from contactos)

pero esta no funciona, puesto que me muestra solo algunos datos, y no todos, alguien puede echarme una mano?? GRACIASSSSSS
__________________
Artis
  #2 (permalink)  
Antiguo 18/07/2008, 07:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta Anidada

Cita:
ORGANIZACIONES
id_organizacion
nombre
razon_social
direccion
cp
CONTACTOS
id_contacto
nombres
apllidos
direccion
cp
No tienes ciudad y código postal aparece como cp en ambas tablas. Si los tienes podrías incorporarlos.
Prueba esto:
(SELECT nombre as NOMBRE,razon_social AS APELLIDOS_RAZÓNSOCIAL,direccion AS DIRECCIÓN,poblacion AS POBLACIÓN,cp AS CÓDIGO_POSTAL from organizaciones)
UNION ALL
(SELECT nombres,apellidos,direccion,poblacion,cp from contactos)

En caso de que siga dándote problemas, deberías ver el tipo de datos de los campos, pues debería ser semejante en los campos seleccionados en primer lugar, en segundo lugar, en tercer lugar, etc. de las tablas. Pues si no son del mismo tipo puede verse afectada la longitud.
  #3 (permalink)  
Antiguo 18/07/2008, 07:48
Avatar de Sensorium  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo-Uruguay
Mensajes: 207
Antigüedad: 16 años, 9 meses
Puntos: 7
Respuesta: Consulta Anidada

jurena: Gracias por responder, mira te muestro mi consulta tal y cual la tengo en el Archivo:

$sql="(SELECT nombre,razon_social,direccion,poblacion,codigo_pos tal,ciudad from organizaciones WHERE envios REGEXP '[[:<:]]$_POST[tipo][[:>:]]')
UNION ALL
(SELECT nombres,apellidos,direccion,poblacion,codigo_posta l,ciudad from contactos WHERE envios REGEXP '[[:<:]]$_POST[tipo][[:>:]]')";


Los campos que me muestra bien es direccion y CP, nada mas los demas me muestra por ejemplo si es un contacto solo el nombre, pero la consulta que me haz escrito me demuestra que el problema esta en que los nombre de los campos son diferentes en las 2 tablas, con esto al utilizar "AS" le estoy diciendo que el campo nombre me lo muestre como nombres? digo esto por el tema de el "print" en php, ya que hago una consulta asociativa mysql_fetch_assoc(), o sea como llamo a ese campo?
__________________
Artis
  #4 (permalink)  
Antiguo 18/07/2008, 09:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta Anidada

codigo_pos tal
y codigo_post al
eso no son nombres aceptables para MySQL si no los pones entre acentos graves, pues separas con espacio en dos partes.
escríbelos así:
`codigo_post al`
`codigo_posta l`

En cuanto a lo otro que preguntas, te diré que el alias sirve como nombre de carga en el PHP, y el nombre de los campos o de los alias de la primera tabla del union es el que sirve de referencia para los campos, y también en PHP.
En este foro no puedo escribir PHP. Mira eso de los nombres con espacio en blanco y comprueba también si la naturaleza del primero de la primera tabla y del primero de la segunda es la misma, y así sucesivamente hasta el último. Mysql usa como nombres los de los campos de la tabla primera del union; a esos o a sus alias deberás recurrir cuando trabajes con PHP, y no a los de la segunda tabla.
Como te he dicho, el problema no es que el nombre de los campos sea distinto, sino que su tipo lo sea; mientras que el tipo y el número de campos sea el mismo, no tiene por qué sucederte lo que dices.

Última edición por jurena; 18/07/2008 a las 10:05
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 21:19.