我想要的是,如果不将任何值传递给变量,那么它应该显示表中的所有值,而如果我将值传递给变量,那么它应该是该参数的过滤器上的数据。
SET @groupname := 'MidasGoogleAppsUsers';
IF @groupname = '' THEN
SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t;
ELSE
SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE t.GroupName = @groupname;
END IF;
以下是表结构:
CREATE TABLE userapplication
(`ID` INT,
`ApplicationName` VARCHAR(100),
`GroupName` VARCHAR(100),
`UserName` VARCHAR(100))
答案 0 :(得分:1)
试试这个:
SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE @Groupname is null or @Groupname = '' or t.GroupName = @groupname;
您可以使用where
子句中的逻辑执行此操作。您不需要if
。
添加更多条件:
SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE (@Groupname is null or @Groupname = '' or t.GroupName = @groupname) and
(@UserName is null or @UserName = '' or t.UserName= @UserName );
答案 1 :(得分:0)
您的@groupname
可能不是''
,而是null
。您不需要使用该查询if
SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE t.GroupName = @groupname
OR @groupname IS NULL
答案 2 :(得分:0)
据我所知,MySQL不支持默认参数。有几个关于此的StackOverflow帖子。所以看起来你必须传递@groupName
的值。
您可以将这两个查询组合在一起:
SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE @groupname = '' OR t.GroupName = @groupname;
或者,如果您将NULL
用于@groupName
(我推荐用于此类内容):
SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE @groupname IS NULL OR t.GroupName = @groupname;