2013-07-12 2 views
0

나는 두 개의 테이블이 있습니다 - bot_idplayer_id 두 테이블에 걸쳐 선택 - 조인 또는 합집합이 확실하지 않은 경우

  • bot_inventory 포함 -

    1. 가야 분류 목록 bot_id

    item_id 내가 쿼리의 출력을하고 싶은 무엇 포함입니다 bot_id는 하나의 열 수 (player_id)와 다른 수 (`item_id)를가집니다. 이것은 단지 que에있는 bot_id를 기반으로해야합니다.

    SELECT `que`.`bot_id`, 
         Count(`que`.`player_id`)   AS players, 
         Count(`bot_inventory`.`item_id`) AS items 
    FROM `que` 
         LEFT JOIN `bot_inventory` 
           ON `que`.`bot_id` = `bot_inventory`.`bot_id` 
    ORDER BY `que`.`bot_id` 
    

    을하지만 바로 나오는 아니에요 :

    나는 그것을 시도를 했어요 어떤 도움이 많이 주시면 감사하겠습니다 /!

  • +0

    'bot_id'가 pk 인 기본 봇 테이블이 있습니까? –

    +0

    어떤 오류가 발생합니까? – hd1

    +0

    @lc. 아니, 불행히도. – user2504897

    답변

    3

    "제대로 나오지 않습니다."라고 말하면됩니다. 나는 COUNT 집합에 의해 반환 된 값이 예상 한 것보다 큰 것을 의미합니다. 그 이유는 que의 행이 bot_inventory의 여러 행과 일치하고 COUNT 집계가 고유 한 플레이어가 아닌 행을 계산할 예정이기 때문입니다. 다시,

    같은 패턴이 "항목"에 적용
    COUNT(DISTINCT q.player_id) as players, 
    

    수 :

    (bot_id,player_id)의 경우는 "플레이어"카운트 하나의 간단한 수정이 DISTINCT 키워드를 추가 할 것입니다 그런 다음, 가야 테이블에서 고유 그게 유일한 경우.

    사실, 쿼리도

    GROUP BY que.bot_id 
    

    없는 것 같습니다 (문제 위르겐 (D)가 그의 대답에 지적이고, 나는 처음에 있음을 놓쳤다.)

    을 그렇지 않으면, 당신은 카운트를 얻기 위해 인라인 뷰를 사용하도록 쿼리를 다시 작성할 수 있습니다 (예 :

    SELECT q.bot_id 
        , q.players 
        , b.items 
        FROM (SELECT p.bot_id, COUNT(p.player_id) AS players 
          FROM que p 
          GROUP BY p.bot_id 
         ) q 
        LEFT 
        JOIN (SELECT d.bot_id, COUNT(d.item_id) AS items 
          FROM bot_inventory d 
          GROUP BY d.bot_id 
         ) b 
        ON b.bot_id = q.bot_id 
    ORDER BY q.bot_id 
    
    +0

    코드 블록이 완벽하게 작동합니다 (p.bot_id 대신 GROUP BY q.bot_id가있는 오류는 제외). 대단히 감사합니다! – user2504897

    +0

    @ user2504897 : DOH! 내 잘못이야. 일단 오류를 발견하면 쉽게 해결할 수 있습니다. 테스트를 위해 각각의 인라인 뷰 쿼리 (q 및 b로 별칭 지정)를 실행할 수 있습니다. 외부 쿼리는 'q'에서 반환 된 일치하는 bot_id가없는 b 행을 제거합니다. – spencer7593

    관련 문제