2012-10-06 2 views
1

완전히 채워진 입력 값을 가진 첫 번째 행을 선택하는 쿼리를 만들려고합니다. 그렇지 않으면 행에서 아무것도 가져 오지 않습니다. 여기에 지금까지 만들 었 무엇 : 오류 반환내 이름으로 첫 행을 선택하려고 시도했습니다.

CASE WHEN `name_1` != '' and `name_2` != '' and `name_3` != '' and `name_4` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end 
CASE WHEN `name_1` != '' and `name_2` != '' and `name_4` != '' and `name_3` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end 
CASE WHEN `name_1` != '' and `name_4` != '' and `name_3` != '' and `name_2` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end 
CASE WHEN `name_4` != '' and `name_2` != '' and `name_3` != '' and `name_1` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end 

: 그래서 분명히 잘못 쓰여

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN name_1 != '' and name_2 != '' and name_3 != '' and name_4 = '' at line 1

을, 그래서 정확히 어떤 문제가 있습니까? 나는 이것을 올바른 방법으로하고 있는가?

답변

1

귀하의 진술은 일종의 DML 단어 (SELECT, UPDATE, CALL, DO ...)로 시작해야합니다. 즉, 네 테이블의 이름은 네 개의 열이 아니라 두 개의 열 (이름, name_value)이 있어야하므로 테이블은 정규화되지 않았습니다.

과 같을 것이다 CASE를 사용하기위한 올바른 구문 : 귀하의 게시물을 읽는에서

SELECT 
    CASE 
     WHEN name_1 <> '' AND name_2 <> '' AND name_3 <> '' AND name_4 = 'Jimmy' 
      THEN some_column 
     WHEN ... 
      THEN ... 
    END AS column 
FROM names 

는, 그것을 당신이 처음이 아닌 빈 필드에 도착하려고 나타납니다. 다음과 같이 시도해보십시오.

SELECT name_1, name_2, name_3, name_4 
FROM names 
WHERE (name_1 <> '' AND name_2 <> '' AND name_3 <> '' AND name_4 = 'Jimmy') OR 
    (name_1 <> '' AND name_2 <> '' AND name_4 <> '' AND name_3 = 'Jimmy') OR 
    ... 
+1

완벽합니다. 고맙습니다. 나는 너에게 잠시 확인 표시를 할 것이다. –

2

CASE을 사용하는 올바른 방법이 아닙니다. 나는

SELECT `name_1`,`name_2`,`name_3`,`name_4` 
FROM `names` 
WHERE `name_1` IS NOT NULL AND 
     `name_2` IS NOT NULL AND 
     `name_3` IS NOT NULL AND 
     `name_4` IS NOT NULL AND 
     (
      `name_1` = 'JIMMY' OR 
      `name_2` = 'JIMMY' OR 
      `name_3` = 'JIMMY' OR 
      `name_4` = 'JIMMY' 
     ) 

나는이 솔루션은 CASE을 사용하는 것보다 훨씬 짧은 생각, 당신은 JIMMY은 하나 또는 여러 개의 열에 및 열 중 하나가 null이 될 수없는 존재가 될 수있는 행을 선택합니다 같아요.

관련 문제