Sybase ASE: Как отключить нестандартную группу по расширениям - PullRequest
1 голос
/ 20 апреля 2020

Sybase ASE имеет функциональное расширение по сравнению со стандартом ANSI group by , где он может принимать в некоторых полях, которые не входят в group, . Конечным результатом является своего рода самостоятельное объединение, и даже в документации говорится, что это очень запутанная функция.

Пример:

create table #a(id numeric(9), client varchar(50), city  varchar(50))
insert #a values (1, 'aaa','New York')
insert #a values (2, 'aaa','New Jersey')
insert #a values (3, 'bbb','New York')
insert #a values (4, 'ccc','New Jersey')
insert #a values (5, 'aaa','Atlanta')

select count(*),city from #a group by city
select count(*),city,client from #a group by city,client
select count(*),city,client from #a group by city

Результаты:

--      |city       |
--    --|-----------|
--    2 |New York   |
--    1 |Atlanta    |
--    2 |New Jersey |
--    
--      |city       |client |
--    --|-----------|-------|
--    1 |New Jersey |ccc    |
--    1 |New Jersey |aaa    |
--    1 |New York   |bbb    |
--    1 |Atlanta    |aaa    |
--    1 |New York   |aaa    |
--    
--    
--    select count(*),city,client from #a group by city
--      |city       |client |
--    --|-----------|-------|
--    2 |New York   |aaa    |
--    2 |New York   |bbb    |
--    1 |Atlanta    |aaa    |
--    2 |New Jersey |aaa    |
--    2 |New Jersey |ccc    |

Хотя первые два запроса являются стандартными, последний не удастся выполнить в большинстве баз данных, кроме SYBASE ASE.

В запросе: выберите количество (*), city, клиент из #a группы по городам, city не входит в группу по

Результаты сбивают с толку, и это очень легко ошибиться, добавив дополнительное поле в предложение select. В этом случае не только результаты сбивают с толку, но запрос может вызвать сканирование полной таблицы и больших таблиц, что может привести к длительному времени, пока проблема не станет очевидной.

Есть ли способ использования конфигурации клиент / соединение (или что-то еще), чтобы отключить эту функцию?

...