SELECT DISTINCT tabla1.campo1, tabla2.campo2 as nuevonombre, tabla3.campo3 FROM tabla1, tabla2, tabla3 WHERE tabla1.campo1=tabla3.campo1 ORDER BY tabla2.campo2
Muchas veces necesitamos seleccionar información de diversas tablas para poder trabajar, pero como nos gusta ahorrar código pasamos de hacer varias querys, si podemos utilizar sólo una.
En el ejemplo de arriba muestro cómo utilizar un select de distintas tablas. Cosas a tener en cuenta:
- Siempre tenemos que indicar antes del nombre del campo, el nombre de la tabla en la que se encuentra, separados por un punto. Ejemplo: tabla1.campo1
- En el FROM deberán estar todas las tablas utilizadas.
- Podemos asignar campos que no tengamos seleccionados para mostrar en el WHERE.
- También podemos ordenar por campos de diversas tablas.
- DISTINCT elimina las filas duplicadas, se puede dar el caso al trabajar con varias tablas.
- Si tenemos nombres de campos iguales en diferentes tablas, podemos cambiarles el nombre utilizando as. Ejemplo: tabla2.campo2 as nuevonombre
Advierto: Trabajar con muchas tablas y campos en la misma query puede causar problemas de cordura
Actualizado 08/01/2009: Mirar los comentarios! Hay más información útil!
Twittea esto Guardalo en Delicious Compartelo en Facebook








Enero 7th, 2010 at 17:40 pm
Y para facilitarnos (o complicarnos
) más la vida, se pueden modificar los nombres de las tablas, para hacer las sentencias más cortas.
Me explico, en vez de tener que poner en el select el nombre de la tabla antes del campo (SELECT tabla1.campo, tabla2.otrocampo), podemos acortarlo en el FROM, cuando seleccionamos las tablas de las que recogeremos los datos.
Y para no liarlo más, pongo el mismo ejemplo que el post, pero reducido
SELECT DISTINCT t1.campo1, t2.campo2 as nuevonombre, t3.campo3
FROM tabla1 t1, tabla2 t2, tabla3 t3
WHERE t1.campo1=t3.campo1
ORDER BY t2.campo2
Así mejor, ¿no?
Enero 7th, 2010 at 17:43 pm
Hola Alwaison!
¿Dices que se pueden renombrar las tablas al añadirlas al FROM?
¡Genial! Muchas gracias por el dato, no lo sabía!
Enero 7th, 2010 at 18:58 pm
Pues si, se pueden renombrar las tablas en el FROM
Otra cosa, cuando dices: Siempre tenemos que indicar antes del nombre del campo, el nombre de la tabla en la que se encuentra, separados por un punto.
Eso no es del todo cierto… si los nombres de los campos no coinciden, no es necesario indicar el nombre de la tabla, aunque para una mejor comprension del la sentecia, yo siempre los pongo, eso si, acortados como te decia antes….
Aunque quizas, si solo estamos trabajando con una tabla, tampoco es necesario. Eso ya queda al gusto del consumidor
Enero 7th, 2010 at 19:03 pm
Cuento con que trabajamos con varias tablas, por eso indico lo de poner el nombre de la correspondiente a cada campo antes, una forma de no liarnos
Enero 7th, 2010 at 20:31 pm
Yo me aclaro mejor cuando renombro los campos como
t1.campo1 as nombre
sinó termino por liarme.
La consulta sería equivalente a algo así?
SELECT DISTINCT t1.campo1, t2.campo2 as nuevonombre
FROM tabla1 as t1 join tabla2 as t2 on
t1.campo1 = t2.campo1
ORDER BY t2.campo2
Yo es que en el SQL ando un poco pez
Enero 8th, 2010 at 10:01 am
Y no solo podemos utilizar la sentencia AS en los nombres de los campos, sino también en los nombres de las tablas. Esto es algo que nos viene igualmente muy bien si el nombre de la tabla es muy largo y/o lioso.
@Alwaison y @José Rico ya lo han tratado muy bien en el primer caso, pero el segundo no difiere mucho:
SELECT a.nombre, b.direccion
FROM nombre_largo_tabla_1 AS a, nombre_largo_tabla_2 AS b
WHERE a.id=b.id
ORDER BY a.id
Y además, si unimos los dos casos nos quedaría:
SELECT a.nombre AS name, b.direccion AS address
FROM nombre_largo_tabla_1 AS a, nombre_largo_tabla_2 AS b
WHERE a.id=b.id
ORDER BY a.id
Enero 8th, 2010 at 10:06 am
Sois unos cracks chicos, yo creo que con el comentario de Santi hemos terminado de resolver nuestras dudas ¡Gracias!
Enero 18th, 2010 at 10:36 am
Vale, ahora lo mismo pero con distintas BBDD.
Saludos!
Febrero 8th, 2010 at 21:10 pm
Saludos.
Le comento que existe un error de concepto. No estas cambiando el nombre a ningun campo, solo se esta otorgando un nombre o identificación diferente a nivel de la vista resultante de vuestra consulta.
Darle un nuevo nombre a una columna de datos solo seria valido si estuvieramos creando una consulta para la creación y alimentación (con data existente en otras tablas) de una nueva tabla.
Saludos a todos! esta muy buena la pagina.