>In case anyone is confused as to what I'm trying to accomplish, it's an outer 
>join on line 
>items where both sides match with no NULL items.
>If my approach is poor, then I won't have to worry about question about the 
>exception.
>
>SELECT po.ID, pb.ID
>FROM
>  RPL_PO po
>  JOIN RPL_POBILL pb
>    ON pb.PO = po.ID
>WHERE
>  NOT EXISTS (
>    SELECT 1
>    FROM RPL_PO_ITM poi
>    LEFT JOIN RPL_POBILL_ITM pbi
>      ON poi.NDC = pbi.NDC AND pbi.INVOICE = pb.ID
>    WHERE poi.PURCH_ORDER = po.ID
>      AND pbi.COST IS NULL
>  ) AND
>  NOT EXISTS (
>    SELECT 1
>    FROM RPL_POBILL_ITM pbi
>    LEFT JOIN RPL_PO_ITM poi
>      ON pbi.NDC = poi.NDC AND poi.PURCH_ORDER = po.ID
>    WHERE pbi.INVOICE = pb.ID
>      AND poi.PRICE IS NULL
>  ) 

Well, yes, I'm a bit confused, though I blame it mostly on not knowing more 
about your system. Instinctively, I'd say your query ought to work, although 
I've never before seen a NOT EXISTS which links to an outer table in the RIGHT 
side of a LEFT JOIN and haven't thought all too much about it.

I think it is likely that your query could be improved. Am I right in assuming 
that you want there in ALL cases where there is an RPL_PO_ITM to also exist at 
least one RPL_POBILL_ITM record and that all matching RPL_POBILL_ITM must have 
COST defined?

Regardless of the answer to the above question, I hope this query does the same 
as your query and hopefully works (assuming that it is the LEFT JOIN that gives 
you the error):

SELECT po.ID, pb.ID
FROM
  RPL_PO po
  JOIN RPL_POBILL pb
    ON pb.PO = po.ID
WHERE
  NOT EXISTS (
    SELECT 1
    FROM RPL_PO_ITM poi
    LEFT JOIN RPL_POBILL_ITM pbi
      ON poi.NDC = pbi.NDC
    WHERE poi.PURCH_ORDER = po.ID
      AND pbi.COST IS NULL
      AND (pbi.INVOICE = pb.ID
        OR pbi.INVOICE IS NULL)
  ) AND
  NOT EXISTS (
    SELECT 1
    FROM RPL_POBILL_ITM pbi
    LEFT JOIN RPL_PO_ITM poi
      ON pbi.NDC = poi.NDC
    WHERE pbi.INVOICE = pb.ID
      AND poi.PRICE IS NULL
      AND (poi.PURCH_ORDER = po.ID
        OR poi.PURCH_ORDER IS NULL)
  )

I'm curious whether this works, so please report back. Also, if this is a 
Firebird error (i.e. that your query returns such an error regardless of how it 
is executed and that there no stupid thing about this query that we simply fail 
to see) and that it occurs in new Firebird versions, then it ought to be 
reported so that it can be fixed.

HTH,
Set

Reply via email to