Конвертировать синтаксис SQL из MySQL 5.0 в Oracle 12c

0

Я пытаюсь перенести представления MySQL 5.0 в Oracle 12c. Это синтаксис, который у меня есть в MySQL:

select count('table1'.'uuid') AS 'Count',
'table2'.'description' AS 'STATUS',
'table3'.'name' AS 'Court' 
from (('table2' join 'table1') 
join 'table3') 
where (('table1'.'statusCode' = 'table2'.'code') 
and ('table3'.'uuid' = 'table1'.'courtUuid')) 
group by 'table1'.'courtUuid','table2'.'description';

Это синтаксис, который у меня есть для Oracle 12c:

select count(table1.uuid) AS Count,
table2.description AS STATUS,
table3.NAME as Court
from table2
join table1
on (table1.statuscode = table2.code)
join table3
on (table3.uuid = table1.courtuuid)
group by table1.courtuuid,table2.description;

Когда я запускаю синтаксис Oracle 12c, я получаю:

ORA-00979: не выражение GROUP BY 00979. 00000 - "не выражение GROUP BY" * Причина:
* Действие: Ошибка в строке: 3 Столбец: 1

Однако, если я добавлю table3.NAME как часть группы, я получаю 866 строк. Запрос в MySQL дает 1025 строк.

select count(table1.uuid) AS Count,
table2.description AS STATUS,
table3.NAME as Court
from table2
join table1
on (table1.statuscode = table2.code)
join table3
on (table3.uuid = table1.courtuuid)
group by table1.courtuuid,table2.description,table3.NAME;

Может кто-нибудь помочь мне понять это?

  • 0
    1-й SQL не кажется полностью равным 2-му с точки зрения парантеза ... Не могли бы вы попробовать точно такой же (1-й) для Oracle DB?
  • 0
    Не могли бы вы представить примеры данных, на которых можно выполнять запросы MySQL и Oracle, и результаты, которые возвращают обе базы данных?
Показать ещё 3 комментария
Теги:

1 ответ

0

Вы, вероятно, хотите:

select count(table1.uuid) AS Count,
       table2.description AS STATUS,
       table3.NAME as Court
from table2 join
     table1
     on table1.statuscode = table2.code join
     table3
     on (able3.uuid = table1.courtuuid
group by table3.name, table2.description;

Неагрегированные столбцы в select должны быть в group by. К сожалению, у MySQL есть (неправильная) функция, которая не требует этой логики.

Строго говоря, вы также можете:

select count(table1.uuid) AS Count,
       table2.description AS STATUS,
       max(table3.NAME) as Court
from table2 join
     table1
     on table1.statuscode = table2.code join
     table3
     on table3.uuid = table1.courtuuid
group by table1.courtuuid, table2.description;

Это больше похоже на ваш запрос, но первая версия, вероятно, вы намерены.

  • 0
    Если запрос mysql сгенерировал 1025 строк, а запрос оракула сгенерировал только 866 строк, даже с дополнительным выражением в группе, то наверняка также должна быть проблема с данными? (Добавление выражения в группу должно увеличить количество строк, а не уменьшить количество строк?)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню