Hi Jerry.

I'm new to the list, so don't take this as the final
answer.  Wait for a guru to pounce with a better
solution!

But, here is my idea:

Before we start, note that "order" is a reserved word.
 So we must backtick `order` to reference the table in
SQL (or the interpreter will think we're using "order
by")

Now, here's how I understand your schema:

Table `order` has column 'order_id'
Table item has columns 'order_id','item_id'
Table item_status has columns 'item_id',
'item_status_id'
Table status has columns
'item_status_id','status_text'
  where status_text is {"complete"|"pending"}

I've given 3 queries.  The last query is 'the winner'.
 The first two are there only to show the 'thinking
path' I took.  It might help you in case I didn't
quite understand your schema.

1:  (Just to the joins)
SELECT `order`.order_id, item.item_id
,status.status_text
FROM `order` INNER JOIN item USING (order_id)
       INNER JOIN item_status USING(item_id)
       INNER JOIN status USING (item_status_id);

2: (Group up by Order_id)
SELECT `order`.order_id, item.item_id,
group_concat(status.status_text) as "all_stats"
FROM `order` INNER JOIN item USING (order_id)
       INNER JOIN item_status USING(item_id)
       INNER JOIN status USING (item_status_id)
GROUP BY order_id;


3: "THE ANSWER"  Filter out the 'pendings':

SELECT `order`.order_id, item.item_id,
group_concat(status.status_text) as "all_stats"
FROM `order` INNER JOIN item USING (order_id)
       INNER JOIN item_status USING(item_id)
       INNER JOIN status USING (item_status_id)
GROUP BY order_id
HAVING all_stats NOT LIKE "%pending%";


HTH.

-Mike

P.S.:  Please, List.... comment and clean my SQL!  I'm
sure there is a better solution than using
'group_concat()'  I'm here to learn too :)


--- Jerry Swanson <[EMAIL PROTECTED]> wrote:

> How to write the query?
> table1: order (order can have more than 1 item)
> table2: item (has order_id).
> table3: item_status (has item_status_id and item_id)
> table4: status (has item_status_id). Status can be
> 'complete', 'pending'.
> 
> I need to get all orders that have ONLY completed
> items.
> Examples:
> if order has one item and it is completed, I need
> this order.
> If order has 2 items and both completed, I need this
> order.
> If order has 2 items, 1 is completed and 1 is not
> completed, I don't need
> this order.
> 
> Thanks
> 



                
__________________________________ 
Yahoo! FareChase: Search multiple travel sites in one click.
http://farechase.yahoo.com

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

Reply via email to