我来自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;
答案 0 :(得分:0)
关注:您必须执行以下操作才能在STORED PROCEDURE
1-您在MYSQL
中使用SQL SERVER
将查询块设置为与CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_report`(
------
------
)
BEGIN
--Query block with condition
END;
完全相同的包,但语法略有不同
COALESCE
2-您不需要EXISTS
检查是否存在值,您只需使用LIMIT
(IF EXISTS(SELECT 1 FROM gt_postmeta WHERE meta_value = '12345') THEN
也可选)
semicolon
3-在此之后,您可能会遇到一些小问题,例如正确使用BEGIN
,END
& 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
上的文档