Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: m@o_614 en 30 Mayo 2014, 03:32 am



Título: problema con consulta
Publicado por: m@o_614 en 30 Mayo 2014, 03:32 am
Saludos tengo las siguientes tablas

BAR(id,nombre)
CERVEZA(id,nombre)
CLIENTE(id,nombre)
SIRVE(idBAR,idCERVEZA)
ASISTE(idCLIENTE,idBAR)
GUSTA(idCLIENTE,idCERVEZA)

y tengo la consulta que dice nombrar los nombres de las cervezas que no se sirven en el bar 'TARROS'

lo que llevo es esto:

SELECT c.nombre FROM BAR AS b, CERVEZA AS c, SIRVE AS s
WHERE c.id=s.idCERVEZA AND b.id=s.idBAR AND b.nombre='TARROS'

pero a partir de ahi ya no se como seguir

gracias


Título: Re: problema con consulta
Publicado por: elezekiel en 30 Mayo 2014, 04:53 am
Creaste la consulta y te une las cervezas que se sirven en el Bar, para hacer las que NO se sirven en el bar tenes que hacer asi

Código:
Select idCerveza  from Sirve
Where BAR.idBAR <> Sirve.IdBAR

Adaptalo a tu codigo y funcionara.

Lo que hace es comparar el id del bar que se selecciona y le pide que muestre el id de la cerveza siempre y cuando NO coincida con el ID del Bar(en tabla SIRVE).


PD: cuando intentas "acortar" los nombres de tablas al inicio de la consulta la hace mas tediosa entender, es un consejo nomas!

Saluddddd


Título: Re: problema con consulta
Publicado por: m@o_614 en 30 Mayo 2014, 06:56 am
muchas gracias elezekiel por tu respuesta, una ultima duda si la consulta dice:

Combinando una proyección y un producto cartesiano listar los nombres de todas las personas a las que les guste la cerveza 'HEINEKEN'. yo si se lo que es un producto cartesiano pero no se a que se refiere con proyeccion, entonces hice lo siguiente

SELECT p.nombre
FROM CLIENTE AS p, CERVEZA AS c, GUSTA AS g
WHERE g.idCLIENTE=p.id AND g.idCERVEZA=c.id
AND c.nombre = 'HEINEKEN';

pero no se si estoy en lo correcto

de nuevo gracias


Título: Re: problema con consulta
Publicado por: elezekiel en 30 Mayo 2014, 17:06 pm
La proyeccion es cuando seleccionas x cantidad de registros de una tabla, es decir, cuando colocas:

Código:
Select * From BAR

Ahi no haces proyeccion, la proyeccion la haces asi:

Código:
Select idCerveza  from Sirve
Where BAR.idBAR <> Sirve.IdBAR

Pasandotelo en limpio es cuando seleccionas un campo(atributo) o varios (de la relacion en cuestion) pero no usas el "global" (*)

No se si me entendiste.. ya de ahi podes finalizar tu consulta!

Saluuddd