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]

Reply via email to