반응형
WHERE IN 절에 지정된 순서에 따라 행을 정렬합니다.
다음과 같은 것이 있습니다.
SELECT *
FROM table
WHERE id IN (118, 17, 113, 23, 72);
ID 순으로 정렬된 행을 오름차순으로 반환합니다.지정된 순서대로 행을 되돌릴 수 있는 방법이 있습니까?IN
조항?
"ORDER BY FILD"를 사용해야 합니다. 예를 들어 다음과 같습니다.
SELECT * FROM table WHERE id IN (118,17,113,23,72)
ORDER BY FIELD(id,118,17,113,23,72)
다음을 사용해 보십시오.
SELECT * FROM table WHERE id IN (118,17,113,23,72)
ORDER BY FIND_IN_SET(id, '118,17,113,23,72');
두 개의 열(ID, order_num)로 임시 테이블을 만들 수 있습니다.
ID order_num
118 1
17 2
113 3
23 4
72 5
그 후 가입:
SELECT * from table
INNER JOIN #temp_table
ON table.id = #temp_table.id
를 드롭 할 수 있는 것에 주의해 주세요.IN
절을 클릭합니다.
때때로 저는 실제로 영구 테이블을 만들기도 합니다. 왜냐하면 고객이 불가피하게 주문에 대한 생각을 바꾸면 코드를 터치할 필요가 없고 테이블만 터치할 필요가 없기 때문입니다.
편집
ORDER BY FILD()를 사용한 답변은 아마 원하시는 답변일 것입니다.
Set based approach: id 값과 정렬 순서를 포함하는 테이블과 같은 구조를 만들고 결합합니다.
SELECT tbl.*
FROM (VALUES
ROW(118, 1),
ROW(17, 2),
ROW(113, 3),
ROW(23, 4),
ROW(72, 5)
) AS tvc(id, sort)
JOIN tbl ON tvc.id = tbl.id
ORDER BY tvc.sort
ID 값을 기준으로 정렬할 번호를 만들 수 있습니다.
select *
from table
where id in (118,17,113,23,72)
order by
case id
when 118 then 1
when 17 then 2
when 133 then 3
when 23 then 4
when 72 then 5
end
이게 제일 먼저 생각나는 거예요sql은 테스트되지 않았습니다. 올바른 구문을 확인해야 할 수 있습니다.
조금 번거롭지만, 아마 효과가 있을 것이다
select * from table where id = 118
union
select * from table where id = 17
union
.... and so on
언급URL : https://stackoverflow.com/questions/3799935/sort-the-rows-according-to-the-order-specified-in-where-in-clause
반응형
'programing' 카테고리의 다른 글
SQL 조회에 단순 regex 패턴 적용 (0) | 2022.09.17 |
---|---|
MySQL 사용자 DB에 암호 열이 없습니다 - OSX에 MySQL 설치 (0) | 2022.09.17 |
MySQL 8.0에서의 phpMyAdmin (0) | 2022.09.17 |
Vuex 플러그인을 동적으로 등록하시겠습니까? (0) | 2022.09.17 |
업로드한 파일을 디렉토리에 저장하기 전에 이름을 변경하는 방법 (0) | 2022.09.17 |