Listado completo de tutoriales
71 - Función de control if con varias tablas. |
Podemos emplear "if" y "case" en la misma sentencia que usamos un "join".
Por ejemplo, tenemos las tablas "libros" y "editoriales" y queremos saber si hay libros de cada una de las editoriales:
select e.nombre, if (count(l.codigoeditorial)>0,'Si','No') as hay from editoriales as e left join libros as l on e.codigo=l.codigoeditorial group by e.nombre;
Podemos obtener una salida similar usando "case" en lugar de "if":
select e.nombre, case count(l.codigoeditorial) when 0 then 'No' else 'Si' end as 'Hay' from editoriales as e left join libros as l on e.codigo=l.codigoeditorial group by e.nombre;
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists libros, editoriales; create table libros( codigo int unsigned auto_increment, titulo varchar(40) not null, autor varchar(30) not null default 1, codigoeditorial tinyint unsigned not null, precio decimal(5,2) unsigned, primary key (codigo) ); create table editoriales ( codigo tinyint unsigned auto_increment, nombre varchar(20), primary key (codigo) ); insert into editoriales (nombre) values ('Planeta'); insert into editoriales (nombre) values ('Emece'); insert into editoriales (nombre) values ('Paidos'); insert into libros (titulo, autor,codigoeditorial,precio) values('Alicia en el pais de las maravillas','Lewis Carroll',1,23.5); insert into libros (titulo, autor,codigoeditorial,precio) values('Alicia a traves del espejo','Lewis Carroll',2,25); insert into libros (titulo, autor,codigoeditorial,precio) values('El aleph','Borges',2,15); insert into libros (titulo, autor,codigoeditorial,precio) values('Matemática estas ahi','Paenza',1,10); -- Queremos saber si hay libros de cada una de las editoriales, -- necesitamos consultar ambas tablas: select e.nombre, if (count(l.codigoeditorial)>0,'Si','No') as hay from editoriales as e left join libros as l on e.codigo=l.codigoeditorial group by e.nombre; -- Podemos obtener una salida similar usando "case" en lugar de "if": select e.nombre, case count(l.codigoeditorial) when 0 then 'No' else 'Si' end as 'Hay' from editoriales as e left join libros as l on e.codigo=l.codigoeditorial group by e.nombre;
Genera una salida similar a esta: