[英]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
来检查值的存在,您只需使用EXISTS
( LIMIT
也是可选的)
IF EXISTS(SELECT 1 FROM gt_postmeta WHERE meta_value = '12345') THEN
3-之后,您可能会遇到一些小问题,例如正确使用semicolon
, BEGIN
和END
,可以自己解决。
我认为这应该工作:
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.