0

我有 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 子句上,但想不出更好的编写方式。

4

1 回答 1

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'))
于 2013-03-26T17:50:57.277 回答