The outer join part of the "silly query" should return
(1) All pairs a,b for which (a.zone = b.zone ... and b.leftside != '')
(2) A row for each a that is not used in (1), with null for the columns
of b
The where clause then narrows these down to elements of (2) with a.type =
'MX'
No reason there shouldn't be any--and there are some. Your query does not
ask
for records with a.type='A' and a.type='MX', it asks for records of the left
join
with a.type='MX'.
In fact, for your "real" query, without the MX part, you should get a result
row
at least for each row of dns_rec for which leftside != ''. Sounds like you
should
get a lot of them, and it should take a while.
More generally,
select ... from L left join R on CONDITION
gives you:
(1) the result of the inner join,
select ... from L, R where CONDITION
(2) the rows from L that were not used in (1), with nulls for the R
columns
Then, you can apply an additional WHERE clause to that.
> Date: Wed, 22 Jan 2003 12:28:48 -0600 (CST)
> From: [EMAIL PROTECTED]
> To: [EMAIL PROTECTED]
> Subject: Left join returns records it shouldn't
> >Description:
>
> The following silly query (silly because it should return no
> records since it is impossible for a.type to have two different
> values simultaneously), returns two records when it should
> return none with the enclosed test data.
> select a.*, b.* from dns_rec a left join dns_rec b
> on (a.zone = b.zone and
> a.rightside = b.rightside and
> a.type = 'A' and b.type = 'A' and
> a.leftside = '' and b.leftside != '')
> where b.zone is null and a.type = 'MX'
> ;
> [...]
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php