Mysql 在IF-ELSE语句中创建具有比较的视图

Mysql 在IF-ELSE语句中创建具有比较的视图,mysql,sql,select,views,mysql-workbench,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

因此,我决定从现有的表中创建一个视图,但我无法为它们使用比较条件。问题是如果我的预算低于价格,那么它应该在列中显示为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()
必须进入列列表。而带有空格的别名(尤其是结尾处有空格的别名)将来可能会引起麻烦

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

注:

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

a.maxPercentage*(a.maximumprice/100)
如果不等于0,则不一定等于1,但多少不等于0(取决于变量值)?除非有什么原因,这个表达式只能产生0或1,我看不到。我猜OP希望表达式等于0时为0,但其他结果为1。@stickybit。我澄清了答案。我把这个问题解释为语法错误,而不是列的逻辑,因为这个问题没有足够的信息来说明逻辑。