2017-10-11 59 views
0

我来自MSSQL,我试图学习MySQL。 文档似乎无法帮助我。如何在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; 
+0

请编辑您的陈述,以便它不是全部在一行上。这是不可读的。 – msanford

回答

-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

+0

我不只限于选择我吗? – jestrange

0

关注:您必须执行以下任务才能执行此任务MYSQL

1-您在STORED PROCEDURE中使用了STORED PROCEDUREMYSQL设置查询块的包完全按照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-在此之后,你可能会得到一些小问题像正确使用semicolonBEGIN & END,你可以自己解决。