DL,
Thank you very much for the response I really appreciate it. I did follow
your suggestions and then simplified things a bit more. I posted the next
two queries below so you could see where the query goes wrong. I guess I'm
not really looking for a 'quick-fix' solution but rather I am missing some
high-level understanding of the relational schema and SQL. Perhaps you are
telling me what is wrong and I am not seeing it. Sorry if that is the case.
I did figure out the multiple join syntax. The query is below.
DESCRIBE
SELECT
RACES.RACE_ID,
RACES.sequence,
TYPES.typelong,
SCHEDULE.event,
SCHEDULE.date,
PARTY.lname,
POINTFUND.description
FROM
TYPES INNER JOIN POINTFUND ON TYPES.TYPE_ID = POINTFUND.TYPE_ID INNER JOIN
PARTY ON PARTY.PARTY_TYPE = TYPES.TYPE_ID INNER JOIN RACES ON TYPES.TYPE_ID
= RACES.TYPE_ID INNER JOIN SCHEDULE ON SCHEDULE.SCHEDULE_ID =
RACES.SCHEDULE_ID
ORDER BY
SCHEDULE.date, PARTY.lname
table type possible_keys key key_len ref rows Extra
POINTFUND ALL TYPE_ID NULL NULL NULL 2 Using
temporary;
Using filesort
TYPES eq_ref PRIMARY PRIMARY 4 POINTFUND.TYPE_ID 1
PARTY ref PARTY_TYPE PARTY_TYPE 4 TYPES.TYPE_ID 3
RACES ALL SCHEDULE_ID NULL NULL NULL 5 where used
SCHEDULE eq_ref PRIMARY,
SCHEDULE_ID,
SCHEDULE_ID_2 PRIMARY 4 RACES.SCHEDULE_ID 1
I've tried dozens of combinations of different types of joins and still
haven't come to the correct results. After looking at the description of
these queries I have come to believe the issue lies not in the query itself
but how MySQL is using the index. It seems when the key field in the
description is NULL that points to where the RDBMS is having trouble pulling
out the correct records. All of the ID fields are int(11) so I don't think
there should be a datatype problem. From the example below I am OK until
POINTFUND is added to the query and then things go awry where I can't seem
to pull the POINTFUND.description field I need in the query. I'll continue
to plug away at this and see if I can do something with the index...I have
already dropped and rebuilt every index in the DB! Thought someone might
have some more info for me. Again, thank you for any time you spent on this
I appreciate the value of your time.
____________________________________________________________________________
_________________
Thanks for the responses. The below query works fine:
SELECT
RACES.RACE_ID,
RACES.sequence,
TYPES.typelong,
SCHEDULE.event,
SCHEDULE.date,
PARTY.lname,
FROM
TYPES,
RACES,
SCHEDULE,
PARTY,
WHERE
RACES.SCHEDULE_ID = SCHEDULE.SCHEDULE_ID AND
PARTY.PARTY_ID = SCHEDULE.TRACK_ID AND
RACES.TYPE_ID = TYPES.TYPE_ID AND
ORDER BY
SCHEDULE.date, PARTY.lname
The below query returns no records:
SELECT
RACES.RACE_ID,
RACES.sequence,
TYPES.typelong,
SCHEDULE.event,
SCHEDULE.date,
PARTY.lname,
POINTFUND.description
FROM
TYPES,
RACES,
SCHEDULE,
PARTY,
POINTFUND
WHERE
RACES.SCHEDULE_ID = SCHEDULE.SCHEDULE_ID AND
PARTY.PARTY_ID = SCHEDULE.TRACK_ID AND
RACES.TYPE_ID = TYPES.TYPE_ID AND
POINTFUND.TYPE_ID = TYPES.TYPE_ID
ORDER BY
SCHEDULE.date, PARTY.lname
Here are descriptions of the tables in question.
DESCRIBE TYPES
Field Type Null Key Default Extra
TYPE_ID int(11) PRI 0
typeshort char(3)
typelong varchar(45)
category tinytext YES NULL
DESCRIBE POINTFUND;
Field Type Null Key Default Extra
POINTFUND_ID int(11) PRI NULL auto_increment
TYPE_ID int(11) 0
begin date 0000-00-00
end date 0000-00-00
description varchar(255)
There are values in POINTFUND.TYPE_ID that match TYPES.TYPE_ID. The obvious
solution to this is to create a query that joins POINTFUND and TYPES and
then use that query in the above query insead of the POINTFUND table (I hope
that makes sense). Unfortunatelly there doesn't seem to be a mechanism in
MySql to do this. Any other suggestions?
-----Original Message-----
From: DL Neil [mailto:[EMAIL PROTECTED]]
Sent: Saturday, February 09, 2002 5:42 AM
To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: Table appears in multiple joins returns null column
Keith,
> I have the below query that returns the correct records but the
> POINTFUND.description field is all NULL while it has values in the table.
> Any idea why? Thanks.
>
> SELECT
>
> RACES.RACE_ID,
> RACES.sequence,
> TYPES.typelong,
> SCHEDULE.event,
> SCHEDULE.date,
> PARTY.lname,
> POINTFUND.description
>
> FROM
>
> TYPES LEFT JOIN RACES ON RACES.TYPE_ID = TYPES.TYPE_ID
> LEFT JOIN POINTFUND ON POINTFUND.TYPE_ID = TYPES.TYPE_ID,
> SCHEDULE,
> PARTY
>
> WHERE
>
> RACES.SCHEDULE_ID = SCHEDULE.SCHEDULE_ID AND
> PARTY.PARTY_ID = SCHEDULE.TRACK_ID
>
> ORDER BY
>
> SCHEDULE.date, PARTY.lname
Obviously the syntax of the SQL command is ok, else the RDBMS would have
told you. The answer may lie in the
definitions of the races, types, and pointfund tables; or in the data
contained in the join-ing fields (neither
of which are shown here).
Two suggestions:
1 simplify the query to deal with pointfund and one other first, then add
another tbl/join, etc, until you have
rebuilt the entire query - your formatting is 'clean' and allows the
insertion of # comment symbols at the
beginning of lines to remove/return then easily (and without loads of
typing/retyping)
2 have you tried running EXPLAIN to see what MySQL thinks of it all?
Let us know how you get on!
=dn
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php