Создание представления со сравнением в операторе IF ELSE

Поэтому я решил создать представление из моей существующей таблицы, но я не могу использовать для них условие сравнения. Вопрос в том, если мой бюджет меньше цены, тогда он должен отображаться как 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;
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
378
3

Ответы 3

Я думаю, вам нужна была функция 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. Без выборочных данных, желаемых результатов и лучшего объяснения логики другие могут только догадываться, какой на самом деле должна быть логика.

Заметки:

  • Используйте только одинарные кавычки для строковых констант и констант даты. Используйте обратные кавычки, чтобы избежать идентификаторов.
  • Я изменил имена столбцов, поэтому их не нужно экранировать.
  • Строковая константа не является логической. Само выражение просто работает.

Разве a.maxPercentage * (a.maximumprice / 100) не обязательно был бы равен 1, если не равен 0, но более или менее любому числу, не равному 0 (в зависимости от значений переменных)? Если нет какой-либо причины, по которой это выражение может давать только 0 или 1, я не вижу. Я предполагаю, что OP хотел 0 для выражения, равного 0, но 1 для результата любой другой.

sticky bit 30.06.2018 05:27

@stickybit. . . Я уточнил ответ. Я интерпретировал вопрос как вопрос о синтаксической ошибке, а не о логике столбца, потому что в вопросе недостаточно информации для решения этой логики.

Gordon Linoff 30.06.2018 13:12

Другие вопросы по теме