MySQL - consulta mysql para examen

 
Vista:

consulta mysql para examen

Publicado por alvaro (1 intervención) el 24/05/2009 10:07:53
hola resulta que tengo que presentar un trabajo sobre mysql i estoy atascado con una vista.

las tablas son las siguientes:
CREATE TABLE factura
(
idfactura int,
dniclient int(11),
data date,
CONSTRAINT pk_factura PRIMARY KEY (idfactura),
CONSTRAINT fk_factura_clients FOREIGN KEY (dniclient) REFERENCES clients (dniclient)
);

CREATE TABLE clients
(
dniclient int(11),
nom varchar(15),
adresa varchar(20), //la ç no la reconeix
cp int,
poblacio varchar(25),
CONSTRAINT pk_clients PRIMARY KEY (dniclient)
);

i la vista la funcion que tiene que cumplir es devolverme el numero de facturas que tiene tal cliente, la intento crear con el siguiente comando:

>create or replace view clientcompres as
select c.dniclient, c.nom,
(select count(*)
from factura d
where d.dniclient=c.dniclient as nfactures
from clients c;

la verdad es que lo he sacado de PL_SQL i no se si la syntaxis es la misma, tampoco soy muy dado al mySQL. no encuentro porque falla (seguro que sera una chorrada)

Gracias de antemano!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:consulta mysql para examen

Publicado por Gonzalo GC (339 intervenciones) el 24/05/2009 20:29:46
Las vistas en MySQL no soportan subconsultas. Al menos hasta la versión 5.1.
Lo que si puedes hacer, y que además resulta más eficiente es usar GROUP BY para obtener la misma información con mejor performance:

CREATE OR REPLACE clientcompres AS
SELECT
c.dniclient,
c.nom,
COUNT(*) facturas
FROM factura d INNER JOIN clients c USING (dniclient)
GROUP BY dniclient;

Esta vista devuelve el listado de clientes y sus cantidades de facturas. Para ubicar uno sólo deberás consultar la vista comparando dniclient con un valor buscado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar