这是我的存储过程查询。如果typee存在,它应该添加第二个条件或不应该添加。 我的表结构是这样的
|id | name | typee |is_primary|
|1 |IND |0 |1 |
|2 |SRIL |1 |0 |
我的存储过程查询如下
CREATE DEFINER=`root`@`localhost` PROCEDURE `testIfCondition`(IN countryId int(11),IN typee INT(11),IN is_primary INT(11),
out name VARCHAR(50))
BEGIN
select name from country where id = id
if typee != 0 then
and typee= typee
end if;
if is_primary !=0 then
and primary = primary
end if;
END
在上面的查询中,有值必须执行。如果有人知道请帮帮我。当我尝试它时会给出一些语法错误。请告诉我正确的语法来解决我的问题。
提前致谢!!!!
答案 0 :(得分:1)
我不认为您可以使用IF
语句添加更多条件。
您可以选择两次或更多次并将其添加到temporary table
,例如:
首先创建temporary table
DECLARE @tempTable TABLE (
ID INT,
Name NVARCHAR(250),
Typee INT
)
然后将第一个SELECT
结果插入@tempTable
INSERT INTO @tempTable
SELECT * FROM country WHERE id = countryId
然后使用条件检查typee
是否为NULL
IF typee IS NOT NULL AND is_primary IS NOT NULL THEN
SELECT * FROM @tempTable WHERE typee = typee AND is_primary = is_primary
ELSE IF typee IS NOT NULL THEN
SELECT * FROM @tempTable WHERE typee = typee
ELSE IF is_primary IS NOT NULL THEN
SELECT * FROM @tempTable WHERE is_primary = is_primary
ELSE
SELECT * FROM @tempTable
END
虽然我认为这不是最好的做法。
根据其他答案here,您可以先将query
创建为字符串,然后执行它。您的sp
应如下所示:
CREATE DEFINER=`root`@`localhost` PROCEDURE `testIfCondition`(IN countryId int(11),IN typee INT(11),IN is_primary INT(11),
out name VARCHAR(50))
BEGIN
SET @query = CONCAT('select name from country where id = ', countryId);
if typee <> 0 then
SET @query = CONCAT(@query, ' AND typee = ', typee);
end if;
if is_primary <> 0 then
SET @query = CONCAT(@query, ' AND is_primary = ', is_primary);
end if;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
您可以查看here以查看字符串中的执行查询。