使用联盟所有与IF ELSE条件

使用联盟所有与IF ELSE条件

问题描述:

我想联合查询结果与来自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); 
+0

谢谢,但这是一个昂贵的解决方案。它将执行这两个语句。实际上,这只是一个示例查询。实际上,我的表格非常大,您的解决方案将在两个语句中遍历整个表格。所以如果有任何IF ELSE解决方案会更好。 –

+0

@ZaheerAbbas更新回答问题。 –

+0

@ZaheerAbbas你看过程吗?这可以通过程序轻松处理。 –

您可以在不需要存储过程的情况下执行此操作。 使用函数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