× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



There's really no point to the join in this query
select count (distinct a.email)
from table1 a left outer join table2 b
on a.email = b.email;

This would give you the same results..
select count (distinct a.email)
from table1 a;

You did say the more than a count was actually needed, so perhaps the join
has a point in the actual query...

Charles

On Fri, Mar 12, 2021 at 7:19 AM Jon Paris <jon.paris@xxxxxxxxxxxxxx> wrote:

Except that a.event doesn't exist it is b.event which is why we didn't
think it would affect it.

For completeness of the records this "works" but we will probably use a
view or CTE for the actual job since it is not just a count that is needed.

Since only the records in a are needed, by using distinct we can avoid the
where clause - so the temporary fix is:

select count (distinct a.email)
from table1 a left outer join table2 b
on a.email = b.email;


Thanks to all.



On Mar 11, 2021, at 9:18 PM, John Yeung <gallium.arsenide@xxxxxxxxx>
wrote:

On Thu, Mar 11, 2021 at 7:26 PM Jon Paris <jon.paris@xxxxxxxxxxxxxx>
wrote:

Can someone please explain how I can ever get a lower row count from a
left outer join than the number of rows that exist in the left table?

select count(*)
from table1 a left outer join table2 b
on a.email = b.email
where b.event = '2103SM'
order by attend;

That returns query returns a count of 848 rows. There are 858 rows in
table1! (left table). And just for fun an inner join also returns 848 rows.

Any ideas anyone? I thought it was an absolute that a left outer
always returned all rows in the left table.

I think Peter's explanation is correct. To put it another way: Your
left outer join DID return all the rows in the left table. But THEN
you filtered the result of the join with your WHERE clause.

Surely, if you had instead written

select count(*)
from table1 a left outer join table2 b
on a.email = b.email
where a.event = '2103SM'
order by attend;

(note the a.event instead of b.event) then you shouldn't reasonably
expect that rows where a.event <> '2103SM' are included. Otherwise,
what does it even mean to include a.event in the condition?

Your indentation hints at your intention, and Peter provides the most
straightforward rewording to capture that. I think most people would
indent your original query with the WHERE lined up with the FROM and
ORDER BY, and given the actual workings of it, I'm sure you can
understand why.

John Y.
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
list
To post a message email: MIDRANGE-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/midrange-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription
related questions.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com

--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list
To post a message email: MIDRANGE-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/midrange-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.

Help support midrange.com by shopping at amazon.com with our affiliate
link: https://amazon.midrange.com


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.