2013-06-10 4 views
0

내가 원하는 것은 변수에 값을 전달하지 않으면 테이블의 모든 값을 표시해야하는 반면 변수에 값을 전달하면 해당 매개 변수의 필터에 데이터가 있어야합니다.쿼리가 제대로 작동하지 않습니다.

CREATE TABLE userapplication 
      (`ID` INT, 
      `ApplicationName` VARCHAR(100), 
      `GroupName` VARCHAR(100), 
      `UserName` VARCHAR(100)) 
+0

어떤 방법으로 현재의 쿼리가 제대로 작동하지 않습니다 :

더 많은 조건을 추가하려면? –

+0

어떤 일이 일어나지 않아야합니까 (또는 일어나지 않아야합니다) – FJT

+0

@ Fiona = 오류가 발생합니다 : 오류 코드 : 1064 SQL 구문에 오류가 있습니다. 'IF @groupname =' 'THEN SELECT t.GroupName AS GroupName, t.GroupName AS Applicat'at line 1 근처에서 사용할 올바른 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. –

답변

0

귀하의 @groupname 아마 ''하지만 null되지 않습니다 : 여기에

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; 

아래의 테이블 구조입니다. 해당 쿼리에 if이 필요하지 않습니다.

SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName 
FROM UserApplication t 
WHERE t.GroupName = @groupname 
OR @groupname IS NULL 
0

제 생각에는 MySQL은 기본 매개 변수를 지원하지 않습니다. 이것에 대한 몇 가지 StackOverflow 게시가 있습니다. 따라서 @groupName 값을 전달해야합니다.

SELECT t.GroupName AS GroupName, t.GroupName AS ApplicationName, t.UserName 
FROM UserApplication t 
WHERE @groupname IS NULL OR t.GroupName = @groupname; 
+0

이 작동하지 않습니다. –

+0

' groupName' 변수는 정말로'@' 접두사가 붙어 있습니까? 이것이 프로 시저이고 변수가 단지'groupName'이라면 그것은 같은 이름의 컬럼과 충돌 할 것입니다. 자세한 내용은 [docs의 로컬 변수 범위 및 해결 방법] (http://dev.mysql.com/doc/refman/5.0/en/local-variable-scope.html)을 참조하십시오. –

+0

나중에 그 접두어 @ –

1

보십시오 : 당신은 (나는이 같은 뭔가를 권 해드립니다있는) @groupName에 대한 NULL을 사용하게 될 경우

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

을 또는 :

이 같은 두 개의 쿼리를 결합 할 수 있습니다 이 :

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); 
+0

감사합니다. 사용자 이름에 하나 이상의 조건을 추가 할 수있는 방법은 무엇입니까? \ –

+0

이렇게 시도했지만 결과는 다음과 같습니다. SELECT t. GroupName AS GroupName, t.ApplicationName AS ApplicationName, t.UserName FROM UserApplication t $ ApplicationName IS NULL 또는 $ ApplicationName = ''또는 t.ApplicationName = $ ApplicationName 또는 $ Username IS NULL 또는 $ Username = '' OR t .UserName = 'devendrat'; –

+0

사용자 정의 변수에 'devendrat'값을 전달하면 다른 사용자에게도 행이 표시되므로 그럴 수 없습니다.내 scenarion 값을 전달하지 않는 경우 그것은 테이블에서 모든 값을 표시하는 동안 응용 프로그램 또는 사용자 이름을 다음 값을 wrto 그 값을 가치가 있어야합니다. –

관련 문제