Re: BUG in UNION implementation?! Confimation or Explaination please

2007-07-11 Thread Anders Karlsson
UNION will only return distinct rows. This is according to spec and to 
the SQL Standard. To avoid this, use UNION ALL instead of UNION. Try 
that with your queries and you'll see that this will do the trick. This 
is, as I said, in accordance with the standard and the way all SQL based 
databases work.


Quoting SQL 2003 section 4.10.6.2:
MULTISET UNION is an operator that computes the union of two multisets. 
There are two variants, specified

using ALL or DISTINCT, to either retain duplicates or remove duplicates.
Where UNION DISTINCT is the default if neither DISTINCT nor ALL is 
specified then.


Cheers
/Karlsson
list account wrote:

Hi all,
I believe to have found a bug in MySQL's union implementation. Can 
someone

confirm this, please or convince me that this is not a buggy behaviour of
mysql :

UNION seems to behave like DISTINCT by default:

mysql select 2 c1
   - union
   - select 1 c1
   - union
   - select 2 c1
   - union
   - select 1 c1;
++
| c1 |
++
|  2 |
|  1 |
++
2 rows in set (0.00 sec)

mysql select 2 c1,1 union select 1 c1,2 union  select 2 c1,3 union 
select 1

c1,4;
++---+
| c1 | 1 |
++---+
|  2 | 1 |
|  1 | 2 |
|  2 | 3 |
|  1 | 4 |
++---+
4 rows in set (0.00 sec)

mysql select 2 c1,1 union select 1 c1,2 union  select 2 c1,3 union 
select

1,2;
++---+
| c1 | 1 |
++---+
|  2 | 1 |
|  1 | 2 |
|  2 | 3 |
++---+
3 rows in set (0.00 sec)

mysql select avg(c1),avg(distinct c1),sum(c1),count(c1),count(distinct
c1),count(*)  from
   - (
   - select 2 c1
   - union
   - select 1 c1
   - union
   - select 1 c1
   - union
   - select 1
   - ) a
   - ;
+---++---+-+---+--+ 

|avg(c1)|avg(distinct c1)|sum(c1)|count(c1)|count(distinct c1) | 
count(*) |
+---++---+-+---+--+ 

|1.5000 | 1.5000 | 3 |   2 | 2 
|2 |
+---++---+-+---+--+ 


1 row in set (0.00 sec)

but I would have expected:

+---++---+-+---+--+ 

|avg(c1)|avg(distinct c1)|sum(c1)|count(c1)|count(distinct c1) | 
count(*) |
+---++---+-+---+--+ 


|1.2500 | 1.5000 | 5 |   4 |  2 |4 |
+---++---+-+---+--+ 




TIA,

CVH




--
   __  ___ ___   __
  /  |/  /_ __/ __/ __ \/ /  Anders Karlsson ([EMAIL PROTECTED])
 / /|_/ / // /\ \/ /_/ / /__ MySQL AB, Sales Engineer
/_/  /_/\_, /___/\___\_\___/ Stockholm
   ___/   www.mysql.com Cellphone: +46 708 608121
  Skype: drdatabase



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



RE: BUG in UNION implementation?! Confimation or Explaination please

2007-07-11 Thread Rhys Campbell
UNION is mean to removed duplicate rows. Use UNION ALL if you don't want
this to happen.

http://dev.mysql.com/doc/refman/5.0/en/union.html

-Original Message-
From: list account [mailto:[EMAIL PROTECTED]
Sent: 11 July 2007 09:19
To: mysql@lists.mysql.com
Subject: BUG in UNION implementation?! Confimation or Explaination
please


Hi all,
I believe to have found a bug in MySQL's union implementation. Can someone
confirm this, please or convince me that this is not a buggy behaviour of
mysql :

UNION seems to behave like DISTINCT by default:

mysql select 2 c1
- union
- select 1 c1
- union
- select 2 c1
- union
- select 1 c1;
++
| c1 |
++
|  2 |
|  1 |
++
2 rows in set (0.00 sec)

mysql select 2 c1,1 union select 1 c1,2 union  select 2 c1,3 union select 1
c1,4;
++---+
| c1 | 1 |
++---+
|  2 | 1 |
|  1 | 2 |
|  2 | 3 |
|  1 | 4 |
++---+
4 rows in set (0.00 sec)

mysql select 2 c1,1 union select 1 c1,2 union  select 2 c1,3 union select
1,2;
++---+
| c1 | 1 |
++---+
|  2 | 1 |
|  1 | 2 |
|  2 | 3 |
++---+
3 rows in set (0.00 sec)

mysql select avg(c1),avg(distinct c1),sum(c1),count(c1),count(distinct
c1),count(*)  from
- (
- select 2 c1
- union
- select 1 c1
- union
- select 1 c1
- union
- select 1
- ) a
- ;
+---++---+-+---+--+
|avg(c1)|avg(distinct c1)|sum(c1)|count(c1)|count(distinct c1) | count(*) |
+---++---+-+---+--+
|1.5000 | 1.5000 | 3 |   2 | 2 |2 |
+---++---+-+---+--+
1 row in set (0.00 sec)

but I would have expected:

+---++---+-+---+--+
|avg(c1)|avg(distinct c1)|sum(c1)|count(c1)|count(distinct c1) | count(*) |
+---++---+-+---+--+
|1.2500 | 1.5000 | 5 |   4 |  2 |4 |
+---++---+-+---+--+


TIA,

CVH

This email is confidential and may also be privileged. If you are not the 
intended recipient please notify us immediately by telephoning +44 (0)20 7452 
5300 or email [EMAIL PROTECTED] You should not copy it or use it for any 
purpose nor disclose its contents to any other person. Touch Local cannot 
accept liability for statements made which are clearly the sender's own and are 
not made on behalf of the firm.

Touch Local Limited
Registered Number: 2885607
VAT Number: GB896112114
Cardinal Tower, 12 Farringdon Road, London EC1M 3NN
+44 (0)20 7452 5300


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



Re: BUG in UNION implementation?! Confimation or Explaination please

2007-07-11 Thread Joshua J. Kugler
On Wednesday 11 July 2007 00:34, Anders Karlsson wrote:
 UNION will only return distinct rows. This is according to spec and to
 the SQL Standard.

And of course, to no one's surprise, this also matches the mathematical 
definition of union: 

j

-- 
Joshua Kugler   
Lead System Admin -- Senior Programmer
http://www.eeinternet.com
PGP Key: http://pgp.mit.edu/  ID 0xDB26D7CE
PO Box 80086 -- Fairbanks, AK 99708 -- Ph: 907-456-5581 Fax: 907-456-3111

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]