В настоящее время я пытаюсь обновить программное обеспечение, чтобы иметь возможность подключаться к нескольким базам данных. Пока он поддерживает только MySQL, но я пытаюсь подключить его к Oracle DB.
Пока все преобразования работали очень хорошо. Единственная проблема, с которой я столкнулся, заключалась в том, что я пытался преобразовать скрипт для представления.
Моя преобразованная версия выглядит следующим образом:
SELECT c.company_id AS company_id,
c.company_name AS company_name,
c.street || ' ' || c.house_number AS street,
c.city AS city,
c.country AS country,
'DE' AS iso,
(SELECT count(0)
FROM proofheader lleph
WHERE ((lleph.issuer_company_id = c.company_id)
AND (lleph.customer_company_id = p.customer_company_id))) AS lle,
(SELECT count(0)
FROM proofheader ihkph
WHERE ((ihkph.issuer_company_id = c.company_id)
AND (ihkph.customer_company_id = p.customer_company_id)
AND (ihkph.ihk = 1))) AS ihk,
(SELECT count(0)
FROM proofheader reminderph
WHERE ((reminderph.issuer_company_id = c.company_id)
AND (reminderph.customer_company_id = p.customer_company_id)
AND (reminderph.status_of_proof IN ('FIRST_REMINDER',
'SECOND_REMINDER',
'THIRD_REMINDER')))) AS reminder,
0 AS reminderlevel,
p.customer_company_id AS customer_company_id
FROM (company c
LEFT JOIN proofheader p on((p.issuer_company_id = c.company_id)))
WHERE (c.issuer = 1)
GROUP BY c.company_id,
p.customer_company_id
HAVING (count(DISTINCT p.proofheader_id) > 0);
SQL Разработчик выдает ошибку, когда пытаясь запустить его, чтобы оно было «не выражением GROUP BY».
После некоторого исследования я узнал, что Oracle необходимо, чтобы все поля SELECT присутствовали в выражении GROUP BY. SQL Разработчик даже предложил изменить сценарий, после того как выражение GROUP BY выглядит следующим образом:
...
WHERE
(c.issuer = 1)
GROUP BY
c.company_id,
p.customer_company_id,
c.company_name,
c.street,
c.city,
c.country,
'DE',
0
HAVING
(count(DISTINCT p.proofheader_id) > 0);
Если я запускаю этот сценарий, я все равно получаю ошибку «не выражение GROUP BY».
Насколько я могу судить, мне нужно включить все поля SELECT в группу по. Но если я пытаюсь расширить выражение до следующего:
...
GROUP BY
c.company_id,
p.customer_company_id,
c.company_name,
c.street,
c.city,
c.country,
'DE',
0,
ihk,
lle,
reminder
HAVING
(count(DISTINCT p.proofheader_id) > 0);
Я получаю сообщение об ошибке, что напоминание и lle являются недействительными идентификаторами.
Я что-то упустил?