以下是诊所有很多类别的表结构:
Clinic Category
id company_id | clinic_id | type
--- -----------------------------
1 -> 1 | 1 | pre
2 | 1 | pre
2 -> 1 | 2 | ext
2 | 2 | ext
3 -> 1 | 3 | pre
4 -> 2 | 4 | ext
5 -> 2 | 5 | pre
在这里,我想让输出中的所有诊所先按预然后分机排序。但是,有时我会针对 company_id (eg: 1, in the following try
)检查一个条件,我不希望过滤掉诊所。
我的尝试
Clinic.joins("LEFT JOIN categories c ON c.clinic_id = clinics.id").
order("
CASE c.type
WHEN 'pre' THEN 0
WHEN 'ext' THEN 1
ELSE 2
END
").
where("c.company_id = 1 OR c.company_id IS NULL")
问题是,从表格结构中可以看出,如果我没有与公司标识为1
的类别匹配的诊所,它会被过滤掉,但是,我仍然希望该诊所能够是其他类型的输出的一部分。
公司ID的预期输出= 1
Clinic Category
id company_id | clinic_id | type
--- -----------------------------
1 -> 1 | 1 | pre
3 -> 1 | 3 | pre
2 -> 1 | 2 | ext
4 -> NULL | NULL | NULL(or other)
5 -> NULL | NULL | NULL(or other)
公司ID的预期输出= 2
Clinic Category
id company_id | clinic_id | type
--- -----------------------------
1 -> 2 | 1 | pre
5 -> 2 | 5 | pre
2 -> 2 | 2 | ext
4 -> 2 | 4 | ext
3 -> NULL | NULL | NULL (or other)
答案 0 :(得分:2)
在left join
本身,过滤下面的company_id
LEFT JOIN categories c ON c.clinic_id = clinics.id AND c.company_id = 1
希望这会帮助你。