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.
Publicado:
Lun May 04, 2009 8:08 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Consulta sql con unión de varias tablas
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
Publicado:
Lun May 04, 2009 8:13 am
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: Re: Consulta sql con unión de varias tablas
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:
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"?
Publicado:
Mie Sep 09, 2009 7:12 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Consulta sql con unión de varias tablas
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:
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
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