我有三个表:

REGISTERS
------------------
id, name, idColony
------------------
1 , some, 3
2 , othe, 6
3 , sann, 3
------------------

EXTRA_COLONIES
------------------
id, idRegister, idColony
------------------
1,   1,   4
2,   1,   5
3,   2,   8
-----------------

COLONIES
------------------
1, some_colony
2, another_colony
...
...


我有一张桌子,例如REGISTER
该表将具有idColony表中的idColony(必填1 COLONIES),但是此REGISTERS记录/行最多可以包含10个额外的idColony。这就是我分开另一张桌子的原因。

所以我正在做的查询是这样的:

SELECT table1.field,table2.field...
FROM (`REGISTERS`)
JOIN `EXTRA_COLONIES` ON `EXTRA_COLONIES`.`idRegister` = `REGISTERS`.`id`
WHERE (REGISTERS.idColony = '1' or EXTRA_COLONIES.idColony = '1')
GROUP BY `REGISTERS`.`id`
LIMIT 30


此查询的问题是仅获取具有EXTRA_COLONIES的记录
由于链接JOIN EXTRA_COLONIES ON EXTRA_COLONIESidRegister = REGISTERSid

如何获取所有记录,EXTRA_COLONIES与否?

最佳答案

LEFT JOIN将解决问题。

无论idRegister中是否有任何匹配的EXTRA_COLONIES,都应返回REGISTER中的记录

有关MySQL JOIN的更多信息:
http://dev.mysql.com/doc/refman/5.0/en/join.html

10-06 12:19