如何在mysql中的查询中定义可选约束

如何在mysql中的查询中定义可选约束,mysql,Mysql,我有一个简单的问题。我想在MySql上写一个查询。所以我写了这个存储过程来获取一些东西: CREATE DEFINER=`root`@`%` PROCEDURE `attributes_fetchall`(p_origin_id bigint, p_status char(1)) begin select * from attributes where status = p_status and origin_id = p_origin_id; end 但是我想在p_origin_id=nul

我有一个简单的问题。我想在MySql上写一个查询。所以我写了这个存储过程来获取一些东西:

CREATE DEFINER=`root`@`%` PROCEDURE `attributes_fetchall`(p_origin_id bigint, p_status char(1))
begin
select * from attributes where status = p_status and origin_id = p_origin_id;
end
但是我想在p_origin_id=null时获取status=p_status的所有行。我的意思是,当origin\u id=null时,我可以得到这个查询:

而当来源_id!=null返回此查询:

select * from attributes where status = p_status and origin_id = p_origin_id;

我应该如何编写这个存储过程来在一个查询中处理这两个问题?

使用条件测试来检查要使用的选择

CREATE DEFINER=`root`@`%` PROCEDURE `attributes_fetchall`(p_origin_id bigint, p_status char(1))
begin
if p_status is null then
 select * from attributes where status = p_status and origin_id is null;
else
 select * from attributes where status = p_status and origin_id = p_origin_id;
end if;
end

没有任何内容等于或不等于null或任何其他算术运算符,除非null是一个字符串,在这种情况下它应该被引用,否则它要么为null,要么为not null。
CREATE DEFINER=`root`@`%` PROCEDURE `attributes_fetchall`(p_origin_id bigint, p_status char(1))
begin
if p_status is null then
 select * from attributes where status = p_status and origin_id is null;
else
 select * from attributes where status = p_status and origin_id = p_origin_id;
end if;
end