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

Select a dos tablas con LEFT JOIN

Estas en el tema de Select a dos tablas con LEFT JOIN en el foro de Mysql en Foros del Web. Tengo una tabla llamada PROFESIONALES CREATE TABLE `profesionales` ( `id_profesional` int(4) NOT NULL auto_increment, `nomyape` varchar(50), `matricula` varchar(10), `telefono` varchar(20), `tipo` varchar(20), PRIMARY KEY (`id_profesional`) ...
  #1 (permalink)  
Antiguo 25/04/2012, 14:46
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Mensaje Select a dos tablas con LEFT JOIN

Tengo una tabla llamada PROFESIONALES
CREATE TABLE `profesionales` (
`id_profesional` int(4) NOT NULL auto_increment,
`nomyape` varchar(50),
`matricula` varchar(10),
`telefono` varchar(20),
`tipo` varchar(20),
PRIMARY KEY (`id_profesional`)
)
Donde tipo me especifica si es MEDICO u ODONTOLOGO
Eso por un lado, tengo además una tabla control donde guardo en un campo medico el id del médico y en un campo odontólogo el id correspondiente.
Ahora bien al hacer la consulta para mostrar los datos

SELECT profesionales.nomyape AS odontólogo, profesionales.nomyape AS medico FROM (control LEFT JOIN profesionales ON control.odontologo = profesionales.id_profesional LEFT JOIN profesionales ON control.medico = profesionales.id_profesional);


Me tira el siguiente error..

MySQL ha dicho:
#1066 - Not unique table/alias: 'profesionales'

Probe tambien con poner WHERE tipo = ‘MEDICO’ o tipo = ‘ODONTOLOGO’ pero tampoco funciono.
Alguien me puede ayudar, por favor..
  #2 (permalink)  
Antiguo 25/04/2012, 15:49
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Select a dos tablas con LEFT JOIN

Creo que no puedes tener dos alias con el mismo nombre.
  #3 (permalink)  
Antiguo 25/04/2012, 16:40
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Select a dos tablas con LEFT JOIN

Gracias por tu respuesta, deberia tener dos tablas, si o si entonces??
  #4 (permalink)  
Antiguo 25/04/2012, 16:47
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Select a dos tablas con LEFT JOIN

La verdad que no se muy bien que quieres hacer, pero, si lo que pretendes es tener una tabla con "profesionales" con sus "categorias", si, lo ideal serían dos tablas (mínimo)
Por ejemplo:
Tabla profecionaes
---------------------
CREATE TABLE `profesionales` (
`id_profesional` int(4) NOT NULL auto_increment,
`nomyape` varchar(50),
`matricula` varchar(10),
`telefono` varchar(20),
`tipo` int,
PRIMARY KEY (`id_profesional`)
);

Tabla categorias
------------------
CREATE TABLE `categorias` (
`id_categoria` int(4) NOT NULL auto_increment,
`categoria` varchar(50),
PRIMARY KEY (`id_categoria`)
)

De este modo, en la tabla categorias guardas un registro por cada categoria profesional que necesites (odontologo, dentista, curandero, o lo que sea) y en la de profesionales, en el campo tipo haces referencia al id_categoria de la tabla categorias.
Luego la consulta usas un join y a chutar.

Por cierto, faltaria poner las llaves foraneas en la creacion de las tablas :p (así investigas un poco mas)
  #5 (permalink)  
Antiguo 25/04/2012, 16:56
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Select a dos tablas con LEFT JOIN

Okis...mil gracias voy a intentar de esta manera..
__________________
Majo
  #6 (permalink)  
Antiguo 25/04/2012, 17:52
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Select a dos tablas con LEFT JOIN

SELECT profesionales.nomyape AS odontologo, profesionales.nomyape AS medico FROM (control_alumno LEFT JOIN profesionales ON control.odontologo = profesionales.id_profesional LEFT JOIN profesionales ON control.medico = profesionales.id_profesional);

Con esta consulta pretendo mostrar una tabla donde me muestre el nombre del Medico y el nombre del Odontólogo, no tuve problema con otras consultas donde use este tipo de sentencia en este caso si, probé como me indicaste teniendo otra tabla donde guardo la categoría de profesional y tampoco funciono.
Tengo alguna otra manera de especificar TIPO dentro de esta consulta..??
__________________
Majo
  #7 (permalink)  
Antiguo 26/04/2012, 02:21
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Select a dos tablas con LEFT JOIN

Ejemplo de estructura de las tablas:

Código MySQL:
Ver original
  1. SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
  2. SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
  3. SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
  4.  
  5. CREATE SCHEMA IF NOT EXISTS `bd_pruebas` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
  6. USE `bd_pruebas` ;
  7.  
  8. -- -----------------------------------------------------
  9. -- Table `bd_pruebas`.`tblCategorias`
  10. -- -----------------------------------------------------
  11. CREATE  TABLE IF NOT EXISTS `bd_pruebas`.`tblCategorias` (
  12.   `idCategoria` INT NOT NULL AUTO_INCREMENT ,
  13.   `strCategoriaName` VARCHAR(45) NOT NULL ,
  14.   PRIMARY KEY (`idCategoria`) )
  15.  
  16.  
  17. -- -----------------------------------------------------
  18. -- Table `bd_pruebas`.`tblProfesionales`
  19. -- -----------------------------------------------------
  20. CREATE  TABLE IF NOT EXISTS `bd_pruebas`.`tblProfesionales` (
  21.   `idProfesional` INT NOT NULL AUTO_INCREMENT ,
  22.   `strProfesionalNombre` VARCHAR(45) NOT NULL ,
  23.   `strProfesionalMatricula` VARCHAR(45) NULL ,
  24.   `intProfesionalTelefono` BIGINT NULL ,
  25.   `intProfesionalTipo` INT NULL ,
  26.   PRIMARY KEY (`idProfesional`) ,
  27.   INDEX `fkProfesionalesCategorias` (`intProfesionalTipo` ASC) ,
  28.   CONSTRAINT `fkProfesionalesCategorias`
  29.     FOREIGN KEY (`intProfesionalTipo` )
  30.     REFERENCES `bd_pruebas`.`tblCategorias` (`idCategoria` )
  31.  
  32.  
  33.  
  34. SET SQL_MODE=@OLD_SQL_MODE;
  35. SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
  36. SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Un sencillo SELECT:
Código MySQL:
Ver original
  1. SELECT tblProfesionales.*, tblCategorias.*
  2. FROM tblProfesionales
  3. JOIN tblCategorias ON tblProfesionales.intProfesionalTipo = tblCategorias.idCategoria
  4. WHERE tblProfesionales.intProfesionalTipo = 2;

Etiquetas: join, left
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 20:47.