Vincente Aggrippino <[EMAIL PROTECTED]> wrote on 01/11/2006 11:33:38 
PM:

> I have three tables joined on key fields:  delivery is joined with
> invoice_detail on delivery_id and with location on loc_id. I want to 
return
> records of deliveries that have corresponding records in the location 
table,
> but have no corresponding records in the invoice table.
> 
> Here's the query I'm attempting to use:
> 
> select
>     d.co_id,
>     co.name,
>     count(*)
> from
>     company co,
>     delivery d
>     left join ( invoice_detail id, location loc ) on (
>         d.delivery_id = id.delivery_id
>         and d.loc_id  = loc.loc_id
>     )
> where
>     d.co_id             = co.co_id
>     and d.unit_price   is not null
>     and unit_charge    is not null
>     and id.delivery_id is null
>     and loc.loc_id     is not null
> group by d.co_id, co.name
> 
> If I take out either one of the table references in the left join and
> criteria, it works fine.  For example, I can either return deliveries 
that
> have corresponding locations or don't have corresponding invoice
> records.  But I can't return records that have locations and don't have
> invoice records.  I get 0 records in the result set.
> 
> I'm sure I can get this to work if I use something like d.loc_id in ( 
select
> ... from location ..., but I want to avoid that if possible because I 
think
> that subquery retrieves the entire contents of the table for comparison.
> 
> Does anyone have any idea why my query isn't working?
> 
> Any help or ideas are greatly appreciated.


First problem: you are mixing implicit CROSS JOINS and explicit LEFT 
JOINS. As of 5.0.12 that is a recipe for trouble. Here is a repaired 
version:

select
    d.co_id,
    co.name,
    count(*)
from company co
INNER JOIN delivery d
    ON d.co_id = co.co_id
left join invoice_detail id
    ON d.delivery_id = id.delivery_id
LEFT JOIN location loc 
    ON d.loc_id  = loc.loc_id
where d.unit_price   is not null
    and unit_charge    is not null
    and id.delivery_id is null
    and loc.loc_id     is not null
group by d.co_id, co.name

That may have just fixed it... Try it out and let us know.

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine





Reply via email to