Re: Multiple Self Joins and Left Joins ?

2003-09-17 Thread Stephen Fromm
- 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]



Multiple Self Joins and Left Joins ?

2003-09-17 Thread Gary Huntress

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  |
+--+--++

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]