[thelist] SQL help - I think JOINing is required

rudy r937 at interlog.com
Sun Nov 11 22:51:15 CST 2001

> Matt, these tables all will have 1-1 relationships. However there
> will be an additional table in the future which may have multiple
> records for a single ID.

hi marc

if they are 1-1 relationships, consider putting all the columns into one
table next time you design tables like this -- there is a performance
tradeoff, but it's probably immaterial unless you have millions of records,
but on the other hand, it's easier to write queries against one table than

> How much nastier is "a little"?

it isn't at all -- the 1-m query is identical

it's just harder to deal with the output, typically you'll want to "group"
the output by GenInfo ID

also, you probably want outer rather than inner joins, just in case there's
an unmatched record in one of the tables

for example, if you have

  general  contact  job  education
      g1           c1       j1         e1
      g2           c2       j2         e2
      g3           --         j3         e3
      g4           c4       j4         e4

then the query will return only rows 1, 2, and 4, even though there is a
general record g3

so change your query to

    from GenInfo
      outer join Contact on GenInfo.ID = Contact.ID
      outer join Job on GenInfo.ID = Job.ID
      outer join Education on GenInfo.ID = Education .ID

then if there are any contact, job, or education records missing, you'll
get nulls in the corresponding fields but the row will still be there

by the way, matt, one of the reasons i prefer the above syntax to the table
list syntax is because after i write

    from GenInfo, Contact, Job, Education
      where GenInfo.ID ???

i always have to go look up the syntax for the outer join, i can never
remember where that darned asterisk is supposed to go...


More information about the thelist mailing list