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

时间:2017-10-11 13:26:33

标签: 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;

2 个答案:

答案 0 :(得分:0)

关注:您必须执行以下操作才能在STORED PROCEDURE

中执行此任务

1-您在MYSQL中使用SQL SERVER将查询块设置为与CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_report`( ------ ------ ) BEGIN --Query block with condition END; 完全相同的包,但语法略有不同

COALESCE

2-您不需要EXISTS检查是否存在值,您只需使用LIMITIF EXISTS(SELECT 1 FROM gt_postmeta WHERE meta_value = '12345') THEN 也可选)

semicolon

3-在此之后,您可能会遇到一些小问题,例如正确使用BEGINEND& Names Col Times A B 12 B C 13 C D 14 A C 15 B D 16 A D 17 您可以自行解决。

答案 1 :(得分:-1)

我认为这应该有效:

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

上的文档