On Tue, Aug 19, 2008 at 9:52 PM, Arjen Lentz <[EMAIL PROTECTED]> wrote:

> Hi Rob, Brian
>
> On 20/08/2008, at 2:38 PM, Rob Wultsch wrote:
>
>> On Tue, Aug 19, 2008 at 9:25 PM, Brian Aker <[EMAIL PROTECTED]> wrote:
>> I am cleaning out the last of the modes.
>>
>> What is the skinny on ONLY_FULL_GROUP_BY? This is a compatibility question
>> vs the standard.
>>
>> Cheers,
>>       -Brian
>>
>> For whatever it's worth I think it would be missed if ONLY_FULL_GROUP_BY
>> was  permanently set on or not configurable. Many MySQL users are like a
>> fish out of water when they start getting errors from GROUP BY queries that
>> other MySQL environments do not find objectionable. Some very smart people
>> find the setting too restrictive:
>>
>> http://www.oreillynet.com/databases/blog/2007/05/debunking_group_by_myths.html
>>
>
>
> Let's simplify.
> The MySQL bug is described here: http://bugs.mysql.com/bug.php?id=8510
> Essentially, the ONLY_FULL_GROUP_BY setting also rejects constructs that it
> should allow:
>
> create table foo (a int, b int);
> insert into foo values (1, 2), (1, 3), (null, null);
> select sum(a), count(*) from foo group by a; -- This one works
> select round(sum(a)), count(*) from foo group by a; -- This fails
> select ifnull(a, 'xyz') from foo group by a; -- This fails
>
> I would be in favour of fixing this actual problem and then forcing
> only_full_group_by (getting rid of sql_mode).
> Regards,
> Arjen.
> --
>

I say that is not the only problem:
Server version: 5.0.51a-community-nt-log MySQL Community Edition (GPL)

mysql> create table foo (a int, b int, PRIMARY KEY(a));
Query OK, 0 rows affected (0.22 sec)

mysql> insert into foo values (1, 2), (2, 4);
Query OK, 2 rows affected (0.14 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> create table bar (a int, c int);
Query OK, 0 rows affected (0.33 sec)

mysql> insert into bar values (1, 45), (2, 86),(2, 123) ;
Query OK, 3 rows affected (0.16 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT a,b, sum(c)
    -> FROM foo
    ->     INNER JOIN bar USING(a)
    -> GROUP BY a;
ERROR 1055 (42000): 'test.foo.b' isn't in GROUP BY
mysql> set sql_mode ='';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT a,b, sum(c)
    -> FROM foo
    ->     INNER JOIN bar USING(a)
    -> GROUP BY a;
+---+------+--------+
| a | b    | sum(c) |
+---+------+--------+
| 1 |    2 |     45 |
| 2 |    4 |    209 |
+---+------+--------+
2 rows in set (0.11 sec)


I feel like socking myself repeatedly for it, but I think that if ability to
configure the mode is going to be ditched, then I think that the setting
should be left off. Those that understand what is going on will not lose
anything, and those that don't will have a lower barrier to entry. Those
that have a significant amount of existing code that assumes that
ONLY_FULL_GROUP_BY  is not in the sql_mode will have an easier transition.

I think it can be useful be able to do what I showed an example of above. I
think users that don't know  better (and some that do) will find ways to
abuse RDMBS.

Just my 2c.

-- 
Rob Wultsch
_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to