SQL IF SELECT查询为null然后执行另一个查询

时间:2014-08-04 14:37:10

标签: mysql sql select null

我有一个定期返回“没有”的查询,如果是这种情况我想运行不同的查询,但我不知道这样做的方式。如果有人可以帮忙请。

这是我正在使用的当前代码......

SELECT * FROM cfg_users JOIN cfg_ash ON cfg_users.iUserId = cfg_ash.iUserid WHERE iTeamId = '0' AND sDisabled IS NULL AND iStatusId > 0 AND sDate = '2014-08-01' GROUP BY cfg_users.iUserId ORDER BY iStatusId, sName

我基本上想说

IF <my code> IS NULL THEN <do other code>, IF <my code> IS NOT NULL THEN return the result.

由于

3 个答案:

答案 0 :(得分:3)

有一些简单的方法只使用sql。

将第一个查询定义为临时表,使用union all,使用临时表的计数过滤第二个查询。

with temp as (select * from t1 where 1=0)
select * from temp
union all
select * from t2 where (select count(*) from  temp) =0

此查询将返回第二个表的记录。

with temp as (select * from t1 )
select * from temp
union all
select * from t2 where (select count(*) from  temp) =0

如果临时查询有结果,则只返回临时查询。

您可以使用sql fiddle here进行测试。

答案 1 :(得分:1)

你可以这样做的方式就像这样

  • 设置两个等于您要执行的查询的变量。

  • 当第一个变量不为空时,设置另一个变量等于正确的查询。

  • 使用存储过程执行该查询。

存储程序:

DELIMITER $$

CREATE PROCEDURE `dynamic_query`(in input varchar(255))
BEGIN
    SET @a := input;
    PREPARE stmt FROM @a;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END
$$

DELIMITER ;

您想要执行的两个选择:

SET @A := "SELECT * FROM  cfg_users JOIN cfg_ash ON cfg_users.iUserId = cfg_ash.iUserid WHERE iTeamId='0' AND sDisabled IS NULL AND iStatusId > 0 AND sDate = '2014-08-01' GROUP BY cfg_users.iUserId ORDER BY iStatusId, sName";
SET @B := "your other select here";

获得正确查询的定义者

SET @C := (
SELECT
    CASE 
        WHEN EXISTS
            (   SELECT * 
                FROM  cfg_users 
                JOIN cfg_ash ON cfg_users.iUserId = cfg_ash.iUserid 
                WHERE iTeamId='0' 
                    AND sDisabled IS NULL 
                    AND iStatusId > 0 
                    AND sDate = '2014-08-01' 
                GROUP BY cfg_users.iUserId 
                ORDER BY iStatusId, sName
            )
        THEN @A
        ELSE @B
    END
);

执行声明:

CALL dynamic_query(@C);

答案 2 :(得分:0)

您可以将结果存储在临时表/表变量中,然后检查计数

e.g。

CREATE TABLE #Results ( --columns you need here )
INSERT INTO #Results SELECT * 
FROM  cfg_users 
JOIN cfg_ash ON cfg_users.iUserId = cfg_ash.iUserid WHERE iTeamId='0' AND sDisabled IS NULL AND iStatusId > 0 AND sDate = '2014-08-01' 
GROUP BY cfg_users.iUserId 
ORDER BY iStatusId, sName

SET @Count = SELECT COUNT(*) FROM #Results

IF 0 = @Count THEN
INSERT INTO #Results -- Other Query Here

SELECT * FROM #Results

n.b。您应该在两个查询中指定所需的列,而不是使用*