요청 및 직원에 대해 다른 조인을하고있을 가능성이 있습니다. 이 같은
뭔가 : -
SELECT T.*, ER2.SEN, ER2.BIR, requestcnt
FROM tours T
LEFT OUTER JOIN
(
SELECT R.tourid, count(R.requestid) AS requestcnt, MIN(E.SEN) AS SEN
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
GROUP by R.tourid
) ER
ON ER.tourid = U.tourid
LEFT OUTER JOIN
(
SELECT R.tourid, E.SEN, MIN(E.BIR) AS BIR
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
GROUP by R.tourid, E.SEN
) ER2
ON ER2.tourid = U.tourid
AND ER.SEN = ER2.SEN
편집 - 당신이 정말와 (그걸 얻기 위해 MIN/MAX 기능을 사용할 수 없기 때문에 아무것도의 3 얻기 개정 요청
의 경우는 어색 분을 찾아서 제외하기 위해 사용할 수있는 많은 노력, 그 결과로 다시 등등). 조인 된 하위 쿼리는 그룹당이 아닌 쿼리의 전체 결과에서 작동하므로 실제로는 제한을 쉽게 사용할 수 없습니다.
내 머리 꼭대기에서 생각할 수있는 두 가지 방법. 먼저 하위 쿼리에 시퀀스 번호를 추가하여 우선 순위 순서대로 결과를 얻습니다. 그러면 tourid가 재설정됩니다. 이 같은
뭔가 (테스트되지 않음) : -
SELECT T.*, ER2.SEN, ER2.BIR, requestcnt
FROM tours T
LEFT OUTER JOIN
(
SELECT R.tourid, count(R.requestid) AS requestcnt
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
GROUP by R.tourid
) ER
ON ER.tourid = T.tourid
LEFT OUTER JOIN
(
SELECT R.tourid, E.employeeid, E.SEN, E.BIR, @seq:=IF([email protected], @seq+1, 1) AS seq
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
CROSS JOIN (SELECT @seq:=0, @tourid:=0)
WHERE Funktion = 'XY'
ORDER BY R.tourid, E.SEN, E.BIR, E.employeeid
) ER2
ON ER2.tourid = T.tourid
AND ER2.seq = 3
또 다른 방법은 SELECT에 상관 서브 쿼리를 사용하는 것입니다. 행의 수가 증가 반환이 아마 크게 둔화 될 : -
SELECT T.*,
(
SELECT E.SEN
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
AND R.tourid = T.tourid
ORDER BY E.SEN, E.BIR
LIMIT 3,1
),
(
SELECT E.BIR
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
AND R.tourid = T.tourid
ORDER BY E.SEN, E.BIR
LIMIT 3,1
),
requestcnt
FROM tours T
LEFT OUTER JOIN
(
SELECT R.tourid, count(R.requestid) AS requestcnt
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
GROUP by R.tourid
) ER
ON ER.tourid = T.tourid
또는 아마도 절 (다시 테스트하지) WHERE의를
SELECT T.*, EM.SEN, EM.BIR, EM.employeeid,
requestcnt
FROM tours T
CROSS JOIN employees EM
LEFT OUTER JOIN
(
SELECT R.tourid, count(R.requestid) AS requestcnt
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
GROUP by R.tourid
) ER
ON ER.tourid = T.tourid
WHERE EM.employeeid =
(
SELECT E.employeeid
FROM requests R
INNER JOIN employees E ON E.employeeid = R.employeeid
WHERE Funktion = 'XY'
AND R.tourid = T.tourid
ORDER BY E.SEN, E.BIR
LIMIT 3,1
)
샘플 데이터, 원하는 결과와 질문을 수정하시기 바랍니다, 당신의 질문이 왜 작동하지 않는지 설명하십시오. –