programing

WHERE IN 절에 지정된 순서에 따라 행을 정렬합니다.

bestcode 2022. 9. 17. 10:48
반응형

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

반응형