2017-10-10 19 views

答えて

2

単純に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手続きを見ましたか?それは手続きを介して簡単に処理することができます。 –

2

これは、ストアドプロシージャを必要とせずに行うことができます。 関数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 
関連する問題