First, you database design. You don't need to separate actresses from
actors... Why do that? They are the same entity, a person, with only one
different attribute: the genre. So, you should join them in one single
table:

Actors
======
act_id
name 
genre ENUM('m','f')

Then, the table DVD. If we mantain things as they are, we would need one
entry in table DVD for each actor/actress in the movie, we would be 
repeating the title N times... Whenever you change it, you would need to
change N records... And is redundant information.

So, let's take DVD as an entity by itself. DVD would be:

DVD
===
dvd_id
title
description
year
other_fields_related...

and then, you relate the 2 tables with this one:

DVD_Actors
==========
dvd_id
act_id
leader ENUM('yes','no')

(the table name may not be the happiest.... :-p)
The field leading tells you if that actor is the leading one or not...

> > I want to select the title of each movie, along with the corresponding
> > leading actor and/or actress name, but a straightforward join will only
> > return those movie titles that have NOT NULL values in BOTH the acto_id
> > and actr_id fields in the DVD table.

With this design, you could use:

SELECT M.title, A.name, A.genre, DA.leader 
FROM DVD AS M 
LEFT JOIN DVD_Actors AS DA ON (M.dvd_id=DA.dvd_id) 
LEFT JOIN Actors     AS  A ON (DA.act_id=A.act_id)

Please, read the manual about LEFT JOIN.

> > My grey-haired memory tells me that an outer join for both the actor table
> > and the actress table is the answer, in that the query will return all
> > titles *even if* one or both fields are NULL. (At least that was the case
> > when I was using Oracle!)

And you were right.
 
> > So, can somebody please correct the following query (and explain the
> > syntax) so that it will work please? (I haven't tried putting an outer
> > join in it because I don't understand the syntax.)

In this example, you are using inner join... please, read the manual
about JOINs.
 
> > Select
> >     actr.name,
> >     acto.name,
> >     dvd.title
> > from
> >     actresses actr,
> >     actors acto,
> >     dvd
> > where
> >     actr.actr_id = dvd.actr_id
> > and
> >     acto.acto_id = dvd.acto_id
> > order by dvd.title;
> > 
> > (I used to put (+) at the end of the outer join line, but don't think this
> > will work in MYSQL - at least I don't see it in the manual.)
> > 
> > Thanks in advance for your kind help and sorry for the wordy question!

-- 
Diana Soares


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to