0

私が望むのは、変数に値を渡さない場合は、テーブルからすべての値を表示する必要がありますが、変数に値を渡す場合は、そのパラメーターのフィルターに関するデータにする必要があります。

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))
4

3 に答える 3

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 );
于 2013-06-10T13:34:12.580 に答える
0

あなた@groupnameはおそらくそうではありません''nullifwith that queryは必要ありません

SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE t.GroupName = @groupname 
OR @groupname IS NULL
于 2013-06-10T13:33:37.070 に答える
0

私の知る限りでは、MySQL はデフォルト パラメータをサポートしていません。これに関する StackOverflow の投稿がいくつかあります。したがって、 の値を渡す必要があるようです@groupName

次のように 2 つのクエリを組み合わせることができます。

SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE @groupname = '' OR t.GroupName = @groupname;

または、NULLforを使用する場合@groupName(このようなものにお勧めします):

SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName
FROM UserApplication t
WHERE @groupname IS NULL OR t.GroupName = @groupname;
于 2013-06-10T13:33:53.647 に答える