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:
