我想加入3张桌子。
OFFICE包含办公室的地址/联系方式。 CRIMECAT包含办公室可以处理的犯罪法律类别,并通过'f_id'与OFFICE表相关 CIVILCAT包含办公室可以处理的民法类别,并通过'f_id'与OFFICE表相关。
办公室可以处理犯罪法,民法,两者都没有。
用户放入一个位置,并通过一系列复选框决定他们在点击搜索之前对哪些法律领域感兴趣。然后,应该返回处理该位置中任何已检查类别的办事处地址列表。
这适用于犯罪类别或民事类别,但只要选择了一个或多个,查询就会返回零结果。
查询的工作方式如下:
SELECT DISTINCT OF.f_id, OF.acc, OF.add1, OF.add2, OF.add3, OF.city, OF.pc, OF.tel
FROM office OF
JOIN crimecat CR ON OF.f_id=CR.f_id
WHERE OF.id ='3946' AND CR.cat = 'crm'
我正在敲打砖墙的问题是:
SELECT DISTINCT OF.f_id, OF.acc, OF.add1, OF.add2, OF.add3, OF.city, OF.pc, OF.tel
FROM office OF
JOIN crimecat CR ON OF.f_id=CR.f_id
JOIN civilcat CI ON OF.f_id=CI.f_id
WHERE OF.id ='3946' AND ((CR.cat = 'crm') OR (CI.cat = 'aap'))
我也尝试使用WHERE子句的变体,它也返回零:
WHERE (OF.id ='3946' AND CR.cat = 'crm') OR (OF.id ='3946' AND CI.cat = 'aap')
我开始认为问题出在JOIN(s)而不是WHERE子句上,但却无法想到更好的编写方法。
答案 0 :(得分:1)
SELECT DISTINCT OF.f_id, OF.acc, OF.add1, OF.add2, OF.add3, OF.city, OF.pc, OF.tel
FROM office OF
LEFT JOIN crimecat CR ON OF.f_id=CR.f_id
LEFT JOIN civilcat CI ON OF.f_id=CI.f_id
WHERE OF.id ='3946' AND ((CR.cat = 'crm') OR (CI.cat = 'aap'))