MySQL: «Добавление / вычитание строк в диалекте 3» - ошибка при работе с числовыми полями? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть таблица Service и таблица Payments.Я хочу, чтобы мои клиенты могли оплачивать одну услугу несколькими платежами, но когда я пытаюсь создать форму для совершения платежа, я не могу сделать

"ServiceA"."Cost" - SUM("Payment"."Amount")

substraction в моемSELECT запрос, показывающий сумму, оставшуюся до оплаты.Мне говорят Strings cannot be added or subtracted in dialect 3, хотя все соответствующие поля являются числовыми, с одинаковым количеством десятичных знаков и всем ...

Любая идея о том, что я могу делать неправильно?

РЕДАКТИРОВАТЬ: Подробнее.Соответствующие таблицы на самом деле следующие: ServiceA, ServiceB, ServiceC, ServiceD - все имеют числовое поле Cost.Их первичные ключи на самом деле являются внешними ключами - все они связаны с полем auto_increment BIGINT в таблице For.Это делается для того, чтобы дать им auto_incrementing, но неповторяющихся идентификаторов.

Есть таблица PS (обозначает Payment-Service), выполняющая функции промежуточной таблицы для мульти-мульти-отношения.Он имеет два внешних ключа - один от Payments и один от For.Это дает мне возможность иметь несколько платежей за одну услугу или иметь одну оплату для нескольких услуг.

Кроме того, каждая таблица Service имеет поле, ссылающееся на идентификатор клиента из «Клиентов».

В моем SELECT я пытаюсь сделать следующее:

SELECT "Clients"."Name" || ': ' || "ServiceA"."Name" || ' for ' || "ServiceA"."Cost" - SUM("Payments"."Amount") AS "To-Pay", "ID-Name" AS "ID"
FROM "ServiceA"
LEFT OUTER JOIN "Clients" ON "ServiceA"."Client" = "Clients"."ID-Client"
INNER JOIN "For" ON "ServiceA"."Id-ServA" = "For"."ID"
LEFT OUTER JOIN "PS" ON "For"."ID" = "PS"."For"
LEFT OUTER JOIN "Payments" ON "PS"."Payment" = "Payments"."For"
GROUP BY "To-Pay, "ID"
HAVING "PS"."Payment" IS NULL OR **SUM("Payments"."Amount") < "ServiceA"."Cost"
UNION ALL
(like the above but with other "Service" tables)
ORDER BY "To-Pay"

Это для выпадающего списка в форме Create Payment.Кажется, проблемные части выделены жирным шрифтом.

1 Ответ

0 голосов
/ 23 октября 2018

Попробуйте изменить

"ServiceA"."Cost" - SUM("Payment"."Amount")

на

`ServiceA`.`Cost` - SUM(`Payment`.`Amount`)

или привести к определенному типу

CAST("ServiceA"."Cost" AS DECIMAL(12,2)) - CAST(SUM("Payment"."Amount") AS DECIMAL(12,2));
...