programing

mysql의 select 문 "in" 절에서 값 순서에 따라 정렬

telecom 2023. 10. 12. 21:49
반응형

mysql의 select 문 "in" 절에서 값 순서에 따라 정렬

정수 ID 값이 있는 큰 테이블(수백만 행)에서 계정 레코드 세트를 선택하고 있습니다.어떤 의미에서는 질문에 대한 기본적인 것처럼 말이죠.큰 쉼표로 구분된 목록을 만들어서 쿼리에 "인"절로 전달하는 겁니다.현재 결과는 전혀 질서가 없습니다.제가 하고 싶은 일은 "in" 절의 값 순서대로 결과를 돌려받는 것입니다.

대신 임시 테이블을 만들고 대신 조인을 해야 한다고 생각합니다. 피하고 싶지만 그러지 못할 수도 있습니다.

생각은?현재 쿼리의 크기는 각각 약 60k로 제한되어 있습니다. 출력 크기를 제한하려고 하지만 임의로 클 수 있기 때문에 물리적인 쿼리는 아니더라도 실제적인 관점에서는 "인" 쿼리를 배제할 수 있습니다.

미리 감사드립니다.

사실은 이게 더 낫습니다.

SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIELD(id,5,2,6,8,12,1);

FIELD 설명서는 다음과 같습니다.

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field

약간의 속임수..

SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIND_IN_SET(id,'5,2,6,8,12,1') DESC;

find_in_set의 ID 목록은 문자열이므로 따옴표로 묶습니다.또한 DESC가 없으면 결과가 목록에서 지정한 대로 REVERSE 순서로 반환됩니다.

쿼리가 60K이면 잘못된 방식으로 실행하고 있다는 신호입니다.

ORDER BY 절을 사용하는 것 외에 결과 집합을 주문할 수 있는 방법은 없습니다.IN 조항에 있는 모든 요소를 다시 나열하여 복잡한 CASE 조항을 주문에 넣을 수 있지만, 그러면 쿼리가 120K가 될 것입니다.

원치 않으시겠지만 IN 조항에 있는 값을 테이블이나 임시 테이블에 넣어서 가입하셔야 합니다.임시 테이블에 정렬 순서 열을 포함하고 순서대로 정렬할 수도 있습니다.조인과 같은 데이터베이스.이렇게 하면 쿼리가 잘 수행되는 데 도움이 됩니다.

이것이 제가 mysql 8.0에 대해 얻는 것입니다.위의 답변과는 반대인 것 같습니다.

지정한 목록과 같은 순서로 정렬합니다.

SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIND_IN_SET(id,'5,2,6,8,12,1');

지정된 목록에 따라 역순으로 정렬합니다.

SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIND_IN_SET(id,'5,2,6,8,12,1') DESC;

첫 번째 쿼리는 확실히 절별 순서를 사용합니다.그래서 그냥 조인을 하고, 조항별로 같은 주문을 쓰시면 됩니다.

예를 들어, 이것이 당신의 첫번째 쿼리였다면

SELECT customer_idFROM customer여기서 customer_id는 1과 100 사이입니다.주문성_이름으로

그리고 이번이 두번째 질문이었습니다.

재고_id를 선택FROM 렌탈WHERE customer_id in (...)순서 리스트...)

합하면 다음과 같습니다.

SELECT r.inventory_idFROM 렌탈러이너JOIN고객c온 r.customer_id = c.customer_id여기서 c.customer_id는 1과 100 사이입니다.주문c.last_name 기준

이게 제게 효과가 있었던 겁니다.

SELECT * FROM your_table
WHERE id IN ('5','2','6','8','12','1')
ORDER BY FIELD(id,'5','2','6','8','12','1');

인용문에 ID를 추가했습니다.

언급URL : https://stackoverflow.com/questions/2185029/sort-by-order-of-values-in-a-select-statement-in-clause-in-mysql

반응형