繁体   English   中英

如何在MySQL中编写条件查询?

[英]How to write conditional query in MySQL?

我来自MSSQL,正在尝试学习MySQL。 文档似乎对我没有帮助。

我不希望查询始终以SELECT开始,而是希望查询根据条件进行SELECT,INSERT或UPDATE。 我似乎无法用MySQL做到这一点。 这是我的代码:

    IF COALESCE((SELECT 1 FROM gt_postmeta WHERE meta_value = '12345' LIMIT 1), 0) THEN 
    BEGIN 
        INSERT INTO gt_posts ( 
            post_date, 
            post_content, 
            post_title, 
            post_name, 
            post_type ) 
        VALUES ( 
            '', 
            '0000493729150.jpg', 
            'SHAMROCK', 
            '', 
            ''); 

        SET @parent_id = (SELECT id FROM gt_posts ORDER BY id DESC LIMIT 1);

        INSERT INTO gt_postmeta(
            post_id, 
            meta_key, 
            meta_value) 
        VALUES
            (@parent_id, '_visibility', 'visible'), 
            (@parent_id, '_price', 'H72 SEMI-GLOSS DARK EARTH'), 
            (@parent_id, '_regular_price', 'H72 SEMI-GLOSS DARK EARTH'), 
            (@parent_id, '_sku', '12345'); 

        INSERT INTO gt_warehouse(
            warehouse_id, 
            stock, 
            product_sku) 
        VALUES(
            '178', 
            '', 
            '12345'); 
    END; 
    ELSE 
    BEGIN 
        IF COALESCE((SELECT 1 FROM gt_warehouse WHERE product_sku = '12345' AND warehouse_id = '178' LIMIT 1), 0) THEN 
        BEGIN 
            UPDATE 
                gt_warehouse SET stock = '' 
            WHERE product_sku = '12345' 
            AND warehouse_id = '178'; 
        END; 
        ELSE 
        BEGIN 
            INSERT INTO gt_warehouse( 
                warehouse_id, 
                stock, 
                product_sku) 
            VALUES (
                '', 
                '', 
                '', 
                '12345'); 
        END; 
        END IF; 
    END; 
END IF;

跟随 :您必须执行以下操作才能在MYSQL执行此任务

1-您已在MYSQL使用STORED PROCEDURE将查询块设置为与SQL SERVER完全相同的包,但语法略有不同

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_report`(
------
------
)
BEGIN
--Query block with condition
END;

2-您不需要COALESCE来检查值的存在,您只需使用EXISTSLIMIT也是可选的)

IF EXISTS(SELECT 1 FROM gt_postmeta WHERE meta_value = '12345') THEN

3-之后,您可能会遇到一些小问题,例如正确使用semicolonBEGINEND ,可以自己解决。

我认为这应该工作:

SELECT id, login, ( IF(requires='privacy-weight',0,privacy-weight) ) AS privacy-weight, requires
FROM [mytable]
WHERE [mywhereclause]

有关IF函数在MySQL中如何工作的更多信息,请参见http://dev.mysql.com/doc/refman/5.5/en/if.html上的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM