【问题标题】:If statement is 1 then run specific SQL statement如果语句为 1,则运行特定的 SQL 语句
【发布时间】:2015-10-08 08:03:30
【问题描述】:

我试图学习 MySQL 存储过程,但我陷入了 If..Then 问题。 我正在尝试弄清楚如何显示列对 IF 结果的影响。

这是我的代码,希望你明白我想要做什么,我的问题是在“...”和“...”之间:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_helloworld`()
BEGIN

    SELECT
        ...
        IF pt.is_part_payment = 1 THEN
            pp.due_date AS due_date,
            pp.amount AS amount
        ELSE
            o.due_date AS due_date,
            o.amount AS amount
        END IF;
        ...
    FROM
        orders o
        INNER JOIN payment_types pt ON pt.id = o.payment_type_id 
        INNER JOIN part_payments pp ON pp.order_id = o.order_id
    WHERE
        o.active = 1
END

【问题讨论】:

    标签: mysql if-statement stored-procedures


    【解决方案1】:

    如您所见,您不能在 SQL 查询中间放置 if 语句。但是,您可以使用 case 表达式,尽管您必须为要单独查询的每个字段执行此操作:

    SELECT
        ...
        CASE pt.is_part_payment WHEN 1 THEN pp.due_date ELSE o.due_date END
            AS due_date,
        CASE pt.is_part_payment WHEN 1 THEN pp.amount ELSE o.amount END AS amount,
    ...
    FROM
        orders o
        INNER JOIN payment_types pt ON pt.id = o.payment_type_id 
        INNER JOIN part_payments pp ON pp.order_id = o.order_id
    WHERE
        o.active = 1
    

    【讨论】:

    • 也可以使用IF()函数。
    • 我正在寻找在存储过程中做到这一点的正确方法,必须有一种“最佳实践”的方法?
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2021-11-11
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2016-03-29
    相关资源
    最近更新 更多