1
我想联合查询结果与来自IF ELSE条件的另一个查询结果。以下是我的查询:使用联盟所有与IF ELSE条件
set @x=0;
set @y=1;
select 33 as A from dual
union all
IF @[email protected] then
select 44 as A from dual
else
select 55 as A from dual
ELSE IF;
我想联合查询结果与来自IF ELSE条件的另一个查询结果。以下是我的查询:使用联盟所有与IF ELSE条件
set @x=0;
set @y=1;
select 33 as A from dual
union all
IF @[email protected] then
select 44 as A from dual
else
select 55 as A from dual
ELSE IF;
您可以简单地将它添加到where子句。像下面
set @x=0;
set @y=0;
select 33 as A from dual
union all
select 44 as A from dual
where
@y = @x
union all
select 55 as A from dual
where
@y != @x
更新时间:您可以使用存储过程如下图所示。
drop procedure proc_name;
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_name`(
IN `x` int, IN `y` int
)
BEGIN
if(x = y)then
set @a = 'select 33 as A from dual
union all
select 44 as A from dual ';
else
set @a = 'select 33 as A from dual
union all
select 55 as A from dual ';
end if;
PREPARE stmt FROM @a;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
call proc_name(1,0);
您可以在不需要存储过程的情况下执行此操作。 使用函数CASE。
查询
SET @x = 0;
SET @y = 1;
SELECT 33 AS A FROM DUAL
UNION ALL
SELECT
CASE
WHEN @x = @y
THEN 44
ELSE 55
END AS a
FROM DUAL
结果
A
--------
33
55
查询
SET @x = 0;
SET @y = 0;
SELECT 33 AS A FROM DUAL
UNION ALL
SELECT
CASE
WHEN @x = @y
THEN 44
ELSE 55
END AS a
FROM DUAL
结果
A
--------
33
44
谢谢,但这是一个昂贵的解决方案。它将执行这两个语句。实际上,这只是一个示例查询。实际上,我的表格非常大,您的解决方案将在两个语句中遍历整个表格。所以如果有任何IF ELSE解决方案会更好。 –
@ZaheerAbbas更新回答问题。 –
@ZaheerAbbas你看过程吗?这可以通过程序轻松处理。 –