source

MySQL 쿼리에서 UNION 및 LIMIT 작업 결합

nicesource 2023. 1. 8. 14:34
반응형

MySQL 쿼리에서 UNION 및 LIMIT 작업 결합

Jobs and Companies 테이블이 있으며 다음 조건을 충족하는 20개의 작업을 추출하려고 합니다.

  1. 이름 있는 2개의 회사에서만 작업 가능
  2. 회사당 최대 10개의 일자리가 있을 수 있다.

나는 다음을 시도했다.SELECT와 함께UNION DISTINCT하지만 문제는,LIMIT 0,10결과 세트 전체에 적용됩니다.각 회사에 적용했으면 합니다.

회사당 10개의 작업이 없는 경우 검색된 모든 작업이 쿼리에 반환됩니다.

SELECT c.name, j.title, j.`desc`, j.link 
  FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name IN ('Company1')
UNION DISTINCT
SELECT c.name, j.title, j.`desc`, j.link 
  FROM jobs_job j
INNER JOIN companies_company c ON j.company_id = c.id
WHERE c.name IN ('Company2')
ORDER by name, title
LIMIT 0,10

저는 MySQL을 처음 사용하는 사람이기 때문에 UNION을 사용하는 것이 아니라 보다 스마트한 방법이 있을지도 모르기 때문에 개선을 위한 제안도 환영합니다.

문서를 인용하면

개별 SELECT에 ORDER BY 또는 LIMIT을 적용하려면 SELECT를 둘러싼 괄호 안에 절을 넣습니다.

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

Alex의 답변과 Joe의 관찰에 따라 다음 사항이 SQLite에서 작동해야 합니다.

SELECT * FROM 
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

Teradata에서는 top query와의 결합을 그대로 사용할 수 없습니다.오류가 발생하면 아래와 같이 수정해야 합니다.Teradata 사용자를 위한 솔루션 추가.

Teradata에 제시된 바와 같이 Union과 Top을 함께 쓸 수 있습니다.

언급URL : https://stackoverflow.com/questions/1415328/combining-union-and-limit-operations-in-mysql-query

반응형