0

私は3つのテーブルを持っています:

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
...
...

eg というテーブルがありますREGISTER。このテーブルには、テーブルからのidColony(1idColonyは必須) があります。COLONIESただし、このREGISTERSレコード/行には、最大 10 個の追加idColonyの s を含めることができます。それが私が別のテーブルに分かれた理由です。

だから私がやっているクエリはこれです:

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_COLONIES.idRegister = REGISTERS.id

どうすればすべてのレコードを取得できEXTRA_COLONIESますか?

4

1 に答える 1

1

LEFT JOIN問題を解決します。

の一致idRegisterに関係なく、EXTRA_COLONIESからのレコードREGISTERが返されます。

MySQL JOIN の詳細: http://dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-11-01T02:05:07.220 に答える