----- Original Message ----- 
From: "Gary Huntress" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, September 17, 2003 12:14 PM
Subject: Multiple Self Joins and Left Joins ?


>
> I'm stumped by this query that I think will involve multiple self joins
and
> left joins.
>
> My data looks like:
>
> +------+----------+------------+
> | id   | Category | description |
> +------+----------+------------+
> |    1 | color    | red        |
> |    2 | color    | blue       |
> |    3 | color    | yellow     |
> |    4 | size     | small      |
> |    5 | size     | large      |
> +------+----------+------------+


Are you sure this is a good way to set up your data model?  I don't have the
time to look everything up, but I would question this design because there's
a lot of redundancy going on.  That is, while I'm not sure it violates any
normal form, clearly there's a "functional dependency" (doubt I'm using that
term correctly as per its definition in my RDB text):  e.g. if description =
red, then category = color.  So "category" seems redundant.

> I want to permute every combination of description by Category.  In the
> simple case above I can do
>
>  select color.description , size.description
>  from mystats as color, mystats  as size
> where color.Category="color" and size.Category="size";
> +-------------+-------------+
> | description | description |
> +-------------+-------------+
> | red         | small       |
> | blue        | small       |
> | yellow      | small       |
> | red         | large       |
> | blue        | large       |
> | yellow      | large       |
> +-------------+-------------+
>
> This works fine as long as there are entries present for each category.
> The number of categories is not arbitrary (eventually there will be
exactly
> 14 categories), but there may not be entries in the data table for all
> categories.   For example, there is a third category "material"  but there
> are no values...  so if I had extended my query above to
>
> select color.description , size.description, material.description
> from mystats as color, mystats  as size, mystats as material
> where color.Category="color" and size.Category="size" and
> material.Category="material";
>
> I get no records.
>
> what I want would be something like this:
>
> +-------------+-------------+-------------+
> | description | description | description |
> +-------------+-------------+-------------+
> | red         | small       |        NULL |
> | blue        | small       |        NULL |
> | yellow      | small       |        NULL |
> | red         | large       |        NULL |
> | blue        | large       |        NULL |
> | yellow      | large       |        NULL |
> +-------------+-------------+-------------+
>
> where the third column is null because there are no material categories in
> the data.
>
> I think I need some sort of left join here but in the general case I don't
> think it will work because whatever I decide is my "leftmost" Category may
> have no entries in the table.
>
> I know I can do this at the application level with a few seperate queries
> and a little more processing, but I'm sure that this can be done with
plain
> SQL and I'd like to learn how.
>
> As usual, any help is appreciated.
>
> Thanks!
>
> Gary H
>
>
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]
>


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

Reply via email to