The difference between these two is what happens when a row
of A has no matches in B.
select * from A left join B on A.Time = B.Time
select * from A left join B where A.Time = B.Time
In the first one the condition is carried out during the join
so if a row of A has no matches in B then the B part of the result
is filled out with NULL values.
In the second one A is joined with B and then the "where" is applied
afterwards so if there is no match to a row of A then that row of
A will not appear at all in the result.
Here is an example in R, Note that there was no match to the
third row of A in B so in the first case that row of A appears in the
result with
NULLs in the B column positions. In the second case the third row of A
is dropped from the result.
> library(sqldf)
>
> # BOD comes with R
> A <- BOD[1:3, ]
> B <- BOD[1:2, ]
> A
Time demand
1 1 8.3
2 2 10.3
3 3 19.0
> B
Time demand
1 1 8.3
2 2 10.3
>
> sqldf("select * from A left join B on A.Time = B.Time")
Time demand Time..3 demand..4
1 1 8.3 1 8.3
2 2 10.3 2 10.3
3 3 19.0 NA NA
> sqldf("select * from A left join B where A.Time = B.Time")
Time demand Time..3 demand..4
1 1 8.3 1 8.3
2 2 10.3 2 10.3
On Sun, Oct 27, 2019 at 6:09 PM Benjamin Asher <[email protected]> wrote:
>
> Hi there! My colleagues and I are trying to understand the role of ON
> constraints vs WHERE clauses in JOINs. It seems both of the following work,
> but I’m not really sure why:
>
> Query A:
>
> SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.x=‘constant’;
>
>
> Query B:
>
> SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.x=tab2.x WHERE tab1.x=‘constant’;
>
> Is there a difference between the two (function and performance)? Is there an
> advantage to putting WHERE-type filtering in the ON constraint vs leaving it
> in the WHERE clause for LEFT JOINs?
>
> Thanks!
>
> Ben
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users