Re: exclude lines after outer join, like left joins in 7.24



On Jun 19, 8:18 am, Tom <some-addr...@xxxxxxxxxxxxxx> wrote:
Thanks Art!!

Actually it is the other way around. Want to keep all matched records
and throw away the others. But I got your point, anyway ;-))

But, that's just an inner, or 'normal' join! Just drop the OUTER
clause an poof! You can also try the subquery version, substituting
an EXISTS clause for the NOT EXISTS clause if you don't need any
columns from the match table. Just see which is faster. Remember
Kagel's first law of SQL:

Any SQL SELECT can be express at least 3 different ways.

Its first corollary:

Taking ANSI syntax into consideration and host languages' capability
to relieve the server of some sort and join burdens, there are at
least two more ways to get the desired results.

and its second corollary:

If you haven't tried them all, you may not be using the most efficient
method.

You can only put so much trust in the optimizer. Even one so
sophisticated as IDS's

Art S. Kagel

I thought about 1), but seems to me not effectively enough.
Unfortunately the database-layout I am working on is at least as old as
the server version. That is why my query already takes 1 to 5 minutes
(just the query, without reading actual data!!!). The layout is really,
really crappy.

The second point, though was not present to me. Sounds perfect for my
situation. I already summed up some joins in two temp-tables, so if
"WHERE EXISTS" works, as well, I will be fine with that (I do not have
to read data from the outer joined table).

I suppose solution two is quicker then, right?

Thank you very much for your help.

bye,

Thomas

Art S. Kagel wrote:
On Jun 18, 1:46 pm, Tom <some-addr...@xxxxxxxxxxxxxx> wrote:
Hi there,

I wonder if it is possible to exclude selected lines in i.e a
where-statement after an outer join in informix SE 7.24.

I did some bigger queries with outer-joins, but I am not able to exclude
whole lines when relating to one of the joined columns. The not
outer-Joined columns, the whole lines are keept.

Is it possible to simulate some kind of Left-Join where these lines
would have been deleted?

That is very annoying. I know it is an old server version, but I do not
have a choice.

Sounds like what you want is to eliminate the records which did find a
match in the OUTER table so that you only return those that did not
have a match. Of course in later versions, you could perform the
OUTER join using ANSI syntax and join in the ON clause and filter out
the non-NULL join results in the WHERE clause. In 7.24, with only
Informix syntax OUTER joins, you cannot do so directly. There are,
however, two ways to do this indirectly:

1) SELECT ... FROM tab1, OUTER tab2 WHERE ... INTO TEMP fred; SELECT
<tab1 columns> FROM fred WHERE tab2.col IS NULL;

2) Realize that you don't need to select anything from the OUTER table
and do this as a sub-query:

SELECT tab1.*
FROM tab1
WHERE NOT EXISTS (
SELECT 1
FROM tab2
WHERE tab1.keys = tab2.keys
);

Art S. Kagel


.



Relevant Pages

  • Re: CROSS JOIN
    ... > was that depreciating the original FROM .. ... WHERE syntax would never ... > The problem is that the WHERE clause is done after the FROM clause. ... but thats just outer join stuff. ...
    (comp.databases)
  • Re: Performance degradation with view and "left outer join" vs. "from x, outer y"
    ... Turned Every Which Way But Loose", I reminded the attendees that the ANSI SQL '92 parsing rules REQUIRE that filters in the WHERE clause of a query MUST be processed POST-JOIN in order for an RDBMS to be compliant. ... That means that your filter, c.custid = "AB1234", is applied after all rows of the customer table have been LEFT OUTER JOINed to the my_view VIEW with the results stored into a temp table. ... Now if I use the informix extended outer join syntax: ...
    (comp.databases.informix)
  • Re: Better "Join" vs "Where" clause?
    ... running the SQL directly, in the SQL Server tools, rather than ... WHERE clause has been deprecated, ... AFAIK one cannot perform an outer join in Access without using the explicit ...
    (microsoft.public.access.queries)
  • [Info-ingres] RES: [Info-ingres] Wrong results returned from outer join
    ... Wrong results returned from outer join ... I get the expected zero rows when using the following versions ... " Outer joins specified in the from clause are not the same as joins ... the from clause specifies ...
    (comp.databases.ingres)
  • Does LEFT OUTER JOIN actually work in SQL Server 2000/2005
    ... They're VERY confusing when more than two tables are involved ... COURSE_FACILITY_TYPES is a list of types each course needs ... Then I try to use the ANSI syntax (remember that COURSE_FACILITY_TYPES ... FROM FACILITY_TYPES FT RIGHT OUTER JOIN COURSE_FACILITY_TYPES CF ON ( ...
    (comp.databases)

Loading