次のようにテーブルを結合するために古いスタイルを使用できます。
SELECT c.id, c.name, u.id, u.name, ...
FROM cars c, users u, user_cars_join uc
WHERE u.id = uc.userid
AND c.id = uc.carid
注意事項:
テーブルが存在するのuser_cars_join
は、ユーザーとその車の間の多対多の関係を表すためです。このテーブルを構造から削除すると、users
とcars
テーブルは関連付けられなくなります。
1 対 1、1 対多、多対多の関係の現象を理解する必要があります。
1 対 1 の関係とは、1 つのセット内の 1 つのエンティティが、もう 1 つのセット内の 1 つのエンティティのみに関連付けられる関係です。あなたの場合、1 人のユーザーが 1 台の車しか所有していなかったため、実用的ではありません。1 人で複数の車を所有できます。
1 対多の関係とは、1 つのセット内の 1 つのエンティティが別のセット内の複数のエンティティに関連付けられ、別のセット内の 1 つのエンティティが最初のセット内の 1 つのエンティティのみに関連付けられる関係です。あなたの場合、1 人のユーザーが複数の車を所有していましたが、1 台の車は 1 人のユーザーが所有していました。特に車に登録番号がある場合は、このような関係を持つことができます。スキーマは次のようになります。
User (userid, name)
car_sales (carid, userid, registration_number)
Car (carid, name, brand, model)
userid
表の は、car_sales
この車を所有しているユーザーを示していることに注意してください。また、carid
インテーブルとは、ユニークインcar_sales
テーブルを指します。carid
car
また、このモデルでは、1 人のユーザーが複数の車を所有できることに注意してください。1 つのモデルの自動車に複数のインスタンス (そのアイテム) を複数のユーザーに販売することができます。
これは、これらの関係を表すために最も広く使用され、受け入れられているモデルです。
あなたの例で実装されているように、多対多の関係は、あるセットの複数のエンティティが他のセットの複数のエンティティに関連している場合、およびその逆の場合です。エンティティ間の関係を示すには、別の関係テーブルが必要です。あなたの場合はuser_car_join
テーブルです。