在if else语句中创建带有比较的视图

oiopk7p5  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(282)

因此,我决定从现有的表中创建一个视图,但是我不能对它们使用比较条件。问题是,如果我的预算低于价格,那么它应该在列中显示为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;
qcbq4gxm

qcbq4gxm1#

视图不能包含过程逻辑,这正是if-else构造。您只能在视图中使用逻辑表达式。尝试在这里使用case语句。这将允许您编写在查询视图时可以计算的表达式。

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

您还需要将这个case语句放到上面开始的列列表中。

3hvapo4f

3hvapo4f2#

我猜你想要 if() 功能,而不是 IF 声明。后者不能用于查询。还有 if() 必须在列列表中。而带有空格的别名(尤其是结尾处的a)在将来往往会引起头痛。

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;
nr9pn0ug

nr9pn0ug3#

以下内容将修复您的语法错误:

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 正确地。如果没有样本数据、期望的结果和对逻辑的更好解释,其他人只能猜测逻辑到底应该是什么。
笔记:
仅对字符串和日期常量使用单引号。使用反记号转义标识符。
我更改了列的名称,因此它们不需要转义。
字符串常量不是布尔值。这个表达式本身就是有效的。

相关问题