입력을 기준으로 행을 필터링한 후 테이블을 반환해야 하는 저장 프로시저가 있습니다. 입력 중 두 개는 sort_column
和 sort_dir
。查询必须在 sort_dir
方向(ASC 或 DESC)中 ORDER BY sort_column
입니다.
다음 쿼리를 시도했지만 성공하지 못했습니다. 아래 쿼리는 관련 용어만 포함하도록 단순화되었습니다. 다른 필터는 문제 없이 잘 작동합니다.
SELECT * FROM 表 ORDER BY sort_column sort_dir
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
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
가장 좋은 방법은 여러 가지입니다
으아아아案例
:말이 길어질 수도 있습니다. 하지만
CASE
是返回单个值的表达式。因此,您不能将ASC
和DESC
作为THEN
부분을 기억하세요.또한 중요한 것은 데이터 유형 문제입니다. SQL 컴파일러는
CASE
표현식의 단일 유형을 결정합니다. 열의 유형이 다른 경우 예기치 않은 문제가 발생할 수 있습니다.가장 간단한 해결책은 여러
CASE
표현식을 사용하는 것입니다.