2011-12-20 2 views
1

데이터베이스의 3 개 테이블에서 정보를 가져 오려고합니다. 나는 4 개의 들판을 얻으려고 노력하고있다. '키오스크', '키오스크', '비디오 타임', '세션 타임'. 이렇게하려면 하위 쿼리에서 조인을 시도하고 있습니다.하위 쿼리에 두 개의 조인을 추가하는 방법은 무엇입니까?

SELECT k.kioskid, k.hours, v.time, s.time 
FROM `nsixty_kiosks` as k 
LEFT JOIN (SELECT time 
FROM `nsixty_videos` 
ORDER BY videoid) as v 
ON kioskid = k.kioskid LEFT JOIN 
(SELECT kioskid, time 
FROM `sessions` 
ORDER BY pingid desc LIMIT 1) as s ON s.kioskid = k.kioskid 
WHERE hours is NOT NULL 

내가이 쿼리를 실행하면, 그것은 작동하지만 그것은 단지 각 키오스크 ID의 마지막 행을 보여주는 대신 모든 행을 보여줍니다 이것은 내가 지금까지있는 것입니다. 어떤 라인을 기반으로 표시하기위한 것입니다 'ORDER BY pingid desc LIMIT 1'.

어떤 시체가 몇 가지 아이디어가 있으십니까?

+0

귀하의 테이블 구조, 귀하의 현재 검색어가 생성하는 것과 귀하가 제작하고자하는 것을 보여주십시오. –

답변

0

, 당신은 상관 하위 쿼리를 사용할 수 있습니다 나는 당신의 LEFT JOIN (...) AS v을 고치지 않았습니다. 왜냐하면 저는 그것이 무엇을 하려는지 이해하지 못하기 때문입니다. ON 절은 해당 열을 나타내지 않으므로 LIMIT 또는 그 밖의 항목이없는 한 하위 쿼리에 ORDER BY이 없어도됩니다.

+0

감사합니다. v 쿼리에 제한을 추가하지 않았습니다. 한도를 추가하면 효과가있었습니다. – user875139

0

'v'하위 쿼리에 대한 가입은 실제로 'v'하위 쿼리를 참조하지 않으며 'v'하위 쿼리에도 JOIN 키오스크 필드가 포함되어 있지 않으므로 의심의 여지없이 문제의 일부입니다.

더 많은 정보를 얻으려면 스키마와 샘플 데이터가 필요합니다.

SELECT k.kioskid, 
     k.hours, 
     v.time, 
     (SELECT time 
      FROM sessions 
      WHERE sessions.kioskid = k.kioskid 
      ORDER 
      BY pingid DESC 
      LIMIT 1 
     ) 
    FROM nsixty_kiosks AS k 
    LEFT 
    JOIN (SELECT time 
      FROM `nsixty_videos` 
      ORDER BY videoid 
     ) AS v 
    ON kioskid = k.kioskid 
WHERE hours IS NOT NULL 
; 

N.B. 대신 s에 가입

관련 문제