Поэтому я решил создать представление из моей существующей таблицы, но я не могу использовать для них условие сравнения. Вопрос в том, если мой бюджет меньше цены, тогда он должен отображаться как 1 в столбце или иначе 0. Кроме того, столбец должен быть логическим с именем RiskyorNot. Для этого есть формула, которую я использовал, но не смог ее получить. из-за синтаксической ошибки mysql. Любая помощь Ниже приведено мое заявление:
CREATE VIEW PricevsAllowance as SELECT c.names AS 'category name ',a.maxamt AS 'allowance', tot.totalexpend AS 'total expenditure',RiskyorNot BOOLEAN FROM Category c JOIN allowance a ON c.allow_id = a.allow_id JOIN Totalexpanddetail t ON t.cat_num = c.cat_num
IF(a.maxPercentage *(a.maximumprice/100)) THEN
RiskyorNot = '1'
ELSE
RiskyorNot = '0'
END IF;






Я думаю, вам нужна была функция if (), а не Заявление IF. Последний не может использоваться в запросе. Также if () должен находиться в списке столбцов. А псевдонимы с пробелами (особенно в конце), как правило, вызывают головную боль в будущем.
CREATE VIEW pricevsallowance
AS
SELECT c.names category_name,
a.maxamt allowance,
tot.totalexpend total_expenditure,
if (a.maxpercentage * a.maximumprice / 100, 1, 0) riskyornot
FROM category c
INNER JOIN allowance a
ON c.allow_id = a.allow_id
INNER JOIN totalexpanddetail t
ON t.cat_num = c.cat_num;
Представление не может содержать процедурную логику, что и является конструкцией IF ELSE. В вашем представлении вы сможете использовать только логические выражения. Попробуйте использовать здесь Заявление CASE. Это позволит вам написать выражение, которое может быть оценено при запросе представления.
CASE
WHEN a.maxPercentage * (a.maximumprice / 100)
THEN '1'
ELSE '0'
END AS RiskyOrNot
Вам также нужно будет поместить этот оператор CASE в список столбцов, который вы начали выше.
Следующее должно исправить вашу синтаксическую ошибку:
CREATE VIEW PricevsAllowance as
SELECT c.names AS category_name,
a.maxamt AS allowance,
tot.totalexpend AS total_expenditure,
a.maxPercentage * (a.maximumprice / 100) as RiskyorNot
FROM Category c JOIN
allowance a
ON c.allow_id = a.allow_id JOIN
Totalexpanddetail t
ON t.cat_num = c.cat_num;
Это может или не может правильно вычислить RiskyOrNot. Без выборочных данных, желаемых результатов и лучшего объяснения логики другие могут только догадываться, какой на самом деле должна быть логика.
Заметки:
@stickybit. . . Я уточнил ответ. Я интерпретировал вопрос как вопрос о синтаксической ошибке, а не о логике столбца, потому что в вопросе недостаточно информации для решения этой логики.
Разве
a.maxPercentage * (a.maximumprice / 100)не обязательно был бы равен 1, если не равен 0, но более или менее любому числу, не равному 0 (в зависимости от значений переменных)? Если нет какой-либо причины, по которой это выражение может давать только 0 или 1, я не вижу. Я предполагаю, что OP хотел 0 для выражения, равного 0, но 1 для результата любой другой.