Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Consulta sql con unión de varias tablas
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Consulta sql con unión de varias tablas

Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Consulta sql con unión de varias tablas Responder citando

Tengo la siguiente consulta SQL:

Código:

SELECT c.*, t.nombre Tercero
FROM contacto c, tercero t
WHERE c.codigotercero = t.codigo


Me funciona bien, pero cuando el campo c.codigotercero es null o está vacío no me aparece el registro y quiero que me aparezca, con la columna "Tercero" vacía.
MensajePublicado:
Lun May 04, 2009 8:08 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Consulta sql con unión de varias tablas Responder citando



Anuncios



varios escribió:
Tengo la siguiente consulta SQL:

Código:

SELECT c.*, t.nombre Tercero
FROM contacto c, tercero t
WHERE c.codigotercero = t.codigo


Me funciona bien, pero cuando el campo c.codigotercero es null o está vacío no me aparece el registro y quiero que me aparezca, con la columna "Tercero" vacía.


Para estos casos puedes utilizar LEFT JOIN que es equivalente a lo que nos comentas y, además, sí te mostrará los registros aunque el campo c.codigotercero sea nulo:

Código:

SELECT c.*, t.nombre Tercero
FROM contacto c
  LEFT JOIN tercero t ON c.codigotercero = t.codigo
MensajePublicado:
Lun May 04, 2009 8:13 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Consulta sql con unión de varias tablas Responder citando



Anuncios



alonsojpd escribió:
Para estos casos puedes utilizar LEFT JOIN que es equivalente a lo que nos comentas y, además, sí te mostrará los registros aunque el campo c.codigotercero sea nulo:

Código:

SELECT c.*, t.nombre Tercero
FROM contacto c
  LEFT JOIN tercero t ON c.codigotercero = t.codigo


¿Cómo puedo hacer un left join cuya tabla principal es la misma y que tiene varias tablas secundarias. Es decir, si tengo esto:

Código:

CREATE TABLE entradasalida (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  codigousuario int(10) unsigned DEFAULT NULL,
  fechaentrada datetime DEFAULT NULL,
  resolucion text,
  tarea text,
  equipo varchar(150) DEFAULT NULL,
  codigotercero int(10) unsigned NOT NULL,
  PRIMARY KEY (`codigo`)
);


Y tengo, las tablas "usuario" (enlazada con "codigousuario") y "tercero" (enlazada con "codigotercero"):


Código:

CREATE TABLE usuario (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  nick varchar(20) NOT NULL DEFAULT '',
  contrasena varchar(100) DEFAULT NULL,
  PRIMARY KEY (codigo),
  UNIQUE KEY usuario_nick (nick)
)


Código:

CREATE TABLE tercero (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  nombre varchar(100) NOT NULL DEFAULT '',
  cif varchar(15) DEFAULT NULL,
  direccion varchar(100) DEFAULT NULL,
  tipo varchar(10) DEFAULT NULL,
  observacion varchar(255) DEFAULT NULL,
  PRIMARY KEY (codigo),
  UNIQUE KEY tercero_nombre_cif_tipo (nombre, cif, tipo) USING BTREE
)


Cómo puedo hacer una consulta que me devuelva algo así:

Todos los campos de "entradasalida", nombre_usuario, nombre_tercero.

Teniendo en cuenta que el campo "codigousuario" ó "codigotercero" pueden estar vacíos.

Me imagino que he de utilizar el LEFT JOIN, pero ¿cómo lo hago con una tabla principal "entradasalida" y varias tablas dependientes de ésta "usuario", "tercero"?
MensajePublicado:
Mie Sep 09, 2009 7:12 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Consulta sql con unión de varias tablas Responder citando



Anuncios



varios escribió:
¿Cómo puedo hacer un left join cuya tabla principal es la misma y que tiene varias tablas secundarias. Es decir, si tengo esto:

Código:

CREATE TABLE entradasalida (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  codigousuario int(10) unsigned DEFAULT NULL,
  fechaentrada datetime DEFAULT NULL,
  resolucion text,
  tarea text,
  equipo varchar(150) DEFAULT NULL,
  codigotercero int(10) unsigned NOT NULL,
  PRIMARY KEY (`codigo`)
);


Y tengo, las tablas "usuario" (enlazada con "codigousuario") y "tercero" (enlazada con "codigotercero"):


Código:

CREATE TABLE usuario (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  nick varchar(20) NOT NULL DEFAULT '',
  contrasena varchar(100) DEFAULT NULL,
  PRIMARY KEY (codigo),
  UNIQUE KEY usuario_nick (nick)
)


Código:

CREATE TABLE tercero (
  codigo int(10) unsigned NOT NULL AUTO_INCREMENT,
  nombre varchar(100) NOT NULL DEFAULT '',
  cif varchar(15) DEFAULT NULL,
  direccion varchar(100) DEFAULT NULL,
  tipo varchar(10) DEFAULT NULL,
  observacion varchar(255) DEFAULT NULL,
  PRIMARY KEY (codigo),
  UNIQUE KEY tercero_nombre_cif_tipo (nombre, cif, tipo) USING BTREE
)


Cómo puedo hacer una consulta que me devuelva algo así:

Todos los campos de "entradasalida", nombre_usuario, nombre_tercero.

Teniendo en cuenta que el campo "codigousuario" ó "codigotercero" pueden estar vacíos.

Me imagino que he de utilizar el LEFT JOIN, pero ¿cómo lo hago con una tabla principal "entradasalida" y varias tablas dependientes de ésta "usuario", "tercero"?


Para hacer un LEFT JOIN de una tabla a varias utiliza esta sintaxis:

Código:

select ...
from nombre_tabla_principal tp
  left join (tabla_secundaria1 t1, tabla_secundaria2 t2, ...)
  on tp.codigo_t1 = t1.codigo and tp.codigo_t2 = t2.codigo and ...


En tu caso, sería algo así:

Código:

select es.*, us.nombre Usuario, t.nombre Proveedor
from EntradaSalida es
  left join (tercero  t, usuario us)
  on es.codigotercero=t.codigo and es.codigousuario=us.codigo
MensajePublicado:
Mie Sep 09, 2009 7:21 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A