>  Q&A  >  본문

MySQL: ORDER BY 절과 함께 CASE를 사용하는 방법

입력을 기준으로 행을 필터링한 후 테이블을 반환해야 하는 저장 프로시저가 있습니다. 입력 중 두 개는 sort_columnsort_dir。查询必须在 sort_dir 方向(ASC 或 DESC)中 ORDER BY sort_column입니다.

다음 쿼리를 시도했지만 성공하지 못했습니다. 아래 쿼리는 관련 용어만 포함하도록 단순화되었습니다. 다른 필터는 문제 없이 잘 작동합니다.

  1. SELECT * FROM 表 ORDER BY sort_column sort_dir
  2. SELECT * FROM 테이블 ORDER BY CASE sort_column 'col1'이면 col1_name WHEN 'col2' THEN col2_name END CASE sort_dir WHEN 'asc' 다음 ASC ELSE DESC END

  3. 2개의 입력을 1개의 입력에 _ 형식으로 연결하고 다음을 시도했습니다.

    으아악

오류 #1064가 계속 발생합니다. 위의 경우마다 다르지만 항상 "CASE" 섹션을 가리킵니다. 위에서 언급한 옵션 2의 오류입니다

##1064 - SQL 구문에 오류가 있습니다. 4행의 'WHEN 'col1' THEN col1_name END CASE 'asc' WHEN 'desc' THEN DESC ELSE에 대한 MySQL 서버 버전 설명서를 확인하세요. 사용할 올바른 구문 주변'

문제는 열 이름 지정이 아닌 것 같습니다. 이는 작동하지 않는 정렬 방향입니다. "ASC" 및 "DESC" 부분 없이 위의 각 옵션을 시도하면 문제가 없습니다.

내가 여기서 뭔가 잘못하고 있는 걸까요? CASE 외에 더 좋은 방법이 있나요?

MySQL 버전: 5.6

P粉463291248P粉463291248353일 전610

모든 응답(1)나는 대답할 것이다

  • P粉294954447

    P粉2949544472023-11-02 11:28:32

    가장 좋은 방법은 여러 가지입니다 案例:

    으아아아

    말이 길어질 수도 있습니다. 하지만 CASE 是返回单个值的表达式。因此,您不能将 ASCDESC 作为 THEN 부분을 기억하세요.

    또한 중요한 것은 데이터 유형 문제입니다. SQL 컴파일러는 CASE 표현식의 단일 유형을 결정합니다. 열의 유형이 다른 경우 예기치 않은 문제가 발생할 수 있습니다.

    가장 간단한 해결책은 여러 CASE 표현식을 사용하는 것입니다.

    회신하다
    0
  • 취소회신하다