Select con campos vacios cuando no encuentra

publicado por: Anonymous

Suponiendo que tengo estas dos tablas con los siguientes registros

cliente
id      nombre
1       c1
2       c2
3       c3
4       c4 
5       c5

tabla2
id_cli   dato
1        d1
3        d3
10       d10

Si se hace esta selección nos muestra los clientes que están en tabla2

SELECT tabla2.*, cliente.nombre 
FROM cliente,tabla2
WHERE id = id_cli

id_cli   dato    nombre
1         d1       c1
3         d3       c3

pero lo que busco es que me muestre el siguiente resultado

id_cli   dato    nombre
1         d1       c1
3         d3       c3
10        d10   

Que me muestre la tabla2 y si la id coincide que muestre el campo nombre

¿Es esto posible en sql? o lo tengo que hacer por codigo

solución

Creo que lo que buscas es un LEFT JOIN, donde se muestran los campos coincidentes, y los no coincidentes de la tabla izquierda. Tal como se explica en el manual de MySQL.

SELECT tabla2.id_cli, tabla2.dato, cliente.nombre 
FROM tabla2 
LEFT JOIN cliente ON tabla2.id_cli = cliente.id

Deberia funcionar. Puntualizar que los campos de cliente que no coincidan, seran mostrados como NULL.

Remitete a esta imagen para ver como funcionan los distintos tipos de JOIN graficamente.
Graficos JOIN

Actualizacion

Es posible conseguir que efectivamente los campos NULL sean mostrados en blanco, tal como tu deseas. No es especialmente eficiente, pero hace lo que quieres. El codigo es para MySQL. En MS SQL, la funcion IfNull se cambia por IsNull, tal como se explica en esta pregunta.

SELECT tabla2.id_cli, tabla2.dato, IfNull(cliente.nombre, '') as nombre 
FROM tabla2 
LEFT JOIN cliente ON tabla2.id_cli = cliente.id
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *