2017-10-10 5 views

Répondre

2

Vous pouvez simplement l'ajouter à la clause where. Comme ci-dessous

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 

Mise à jour: Vous pouvez utiliser la procédure stockée comme ci-dessous.

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

Merci, mais c'est une solution coûteuse. Il va exécuter les deux déclarations. En fait, ce n'est qu'un exemple de requête. En réalité, ma table est très grande et votre solution traversera toute la table sur les deux instructions. Donc, ce serait mieux s'il y a une solution IF ELSE. –

+0

@ZaheerAbbas Réponse mise à jour. –

+0

@ZaheerAbbas Avez-vous regardé la procédure? Cela peut être facilement géré par la procédure. –

2

Vous pouvez le faire sans avoir besoin d'une procédure stockée. Utilisation de la fonction CASE.

Query

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 

Résultat

 A 
-------- 
     33 
     55 

Query

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 

Résultat

 A 
-------- 
     33 
     44