我有3个表我想加入。
office包含办公室的地址/联系方式详细信息。CRIMECAT包含办公室可能处理的犯罪法律类别,并通过“f_id”与办公室表相关。CIVILCAT包含办公室可能处理的民事法类别,也通过“f_id”与办公室表相关。
一个办公室可以处理各种类别的犯罪法律,民事法律,两者兼而有之,或者都不处理。
用户输入一个位置,并在点击搜索之前通过一系列复选框来决定他们感兴趣的法律领域。然后,这应该返回一个处理该位置中任何选中类别的办公室的地址列表。
这对于犯罪类别或民事类别都非常有效,但一旦选择了其中一个或多个类别,查询就会返回零结果。
查询的工作方式如下:
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')我开始认为问题出在连接(S)而不是WHERE子句上,但是想不出更好的方法来编写它们。
发布于 2013-03-27 01:50:57
像这样的事情可能会有所帮助。我怀疑你正在寻找其中的任何一个,但你同时要求两个
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'))https://stackoverflow.com/questions/15643912
复制相似问题