2015-01-19 6 views
0

Google 그룹스에서 질문 [here infact]을 추가했습니다!ActiveRecord OUTER JOIN

내 질문이 외부 조인 '레일 방식'을 표현하는 방법은 다음과 같습니다

SELECT 
`employees`.`id` AS t0_r0, `employees`.`name` AS t0_r1, `employees`.`last_seen` AS t0_r2, `employees`.`created_at` AS t0_r3, `employees`.`updated_at` AS t0_r4, `employees`.`punch_clock_id` AS t0_r5, `employees`.`account_id` AS t0_r6, `employees`.`born_at` AS t0_r7, `entrances`.`id` AS t1_r0, `entrances`.`employee_id` AS t1_r1, `entrances`.`clocked_at` AS t1_r2, `entrances`.`created_at` AS t1_r3, `entrances`.`updated_at` AS t1_r4, `entrances`.`entrance_type` AS t1_r5 
FROM 
    `employees` 
LEFT OUTER JOIN 
    `entrances` ON `entrances`.`employee_id` = `employees`.`id` AND (`entrances`.`clocked_at` BETWEEN '2015-01-01' AND '2015-01-31’) 
WHERE 
    `employees`.`account_id` = 2 

내 첫 걸릴했다 : (

current_user.account.employees.includes(:entrances).where('entrances.clocked_at' => @month_range) 

그러나 그것은 단지 입구와 직원들에게 제공합니까 I 않는 느슨한 어디에서 성명의 일부, 모든 경우에 나는 모든 직원 (및 모든 250K 출입구 !!!)) 느슨한

+0

올바른 방법으로 SELECT 문을 표시하기 위해 제 질문을 편집 해 주셔서 감사합니다. @xlembouras! 최선을 다해 노력했지만 편집장이 올바른 억양 무덤을 사용하여 성명을 "추방"하도록 허용하지 않았습니다. - 도와 준 것처럼 ( –

답변

0

employees 아니와 함께 포함하려는 경우where 문에 해당 케이스를 명시 적으로 포함시켜야합니다 (entrances.id IS NULL). 마지막 부분은 @month_range에 포함 된 내용에 따라 약간 차이가있을 수 있습니다 그건

current_user.account.employees.includes(:entrances).where('entrances.id IS NULL OR entrances.clocked_at = ?', @month_range) 

.

+0

) ( 하지만 귀하의 제안은 컴파일되지 않습니다. 무서워 'ActiveRecord :: StatementInvalid : Mysql2 :: 오류 : 'where 절에'entrances.id '알 수없는 열이 있습니다. SELECT'employees'. * FROM'employees' WHERE'employees'.account_id' = 2 AND (입구 .id is NULL 또는 entrances.clocked_at = '2015-02-18')' –