在IF ELSE语句中创建具有比较功能的视图

时间:2018-06-30 01:23:48

标签: mysql sql select views mysql-workbench

因此,我决定从现有表中创建视图,但无法对其使用“比较”条件。问题是,如果我的预算小于价格,则该列应在列中显示为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;

3 个答案:

答案 0 :(得分:1)

视图不能包含过程逻辑,这正是IF ELSE构造的本质。您将只能在视图中使用逻辑表达式。在此处尝试使用CASE statement。这样一来,您就可以编写一个查询视图时可以求值的表达式。

CASE 
    WHEN a.maxPercentage * (a.maximumprice / 100)
    THEN '1'
    ELSE '0'
END AS RiskyOrNot

您还需要将此CASE语句放入您在上面开始的列列表中。

答案 1 :(得分:0)

我猜您想使用if()函数,而不是IF statement函数。后者不能在查询中使用。 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;

答案 2 :(得分:0)

以下应解决您的语法错误:

main

这可能会或可能不会正确计算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; 。没有样本数据,期望的结果以及对逻辑的更好解释,其他人只能猜测逻辑应该是什么。

注意:

  • 仅对字符串和日期常量使用单引号。使用反引号转义标识符。
  • 我更改了列的名称,因此不需要进行转义。
  • 字符串常量不是布尔值。表达式本身很简单。