Mysql 在IF-ELSE语句中创建具有比较的视图
因此,我决定从现有的表中创建一个视图,但我无法为它们使用比较条件。问题是如果我的预算低于价格,那么它应该在列中显示为1,否则显示为0。此外,该列应该是一个名为RiskyorNot的布尔值。为此,我使用了一个公式,但由于某些mysql语法错误,无法将其记下来。以下任何帮助都是我的声明: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
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。我澄清了答案。我把这个问题解释为语法错误,而不是列的逻辑,因为这个问题没有足够的信息来说明逻辑。