我有3个表我想加入。MySQL有两个连接和Where子句
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)rath呃比WHERE子句更好,但是想不出更好的写作方式。
所有的办公室都会在CR和CI表中都有相关记录吗?我问,因为您指定的连接只会在这种情况下返回办公室记录。 – 2013-03-26 17:49:58
不,他们可能有一个相关的记录,一个或两个都没有。 – 2013-03-26 17:53:41
查看下面David Chan发布的答案,它应该给你你想要的东西,并且是我的问题所在。 – 2013-03-26 17:54:42