現在、フレームワーク Scaffold のモデル システムを作成しています。ただし、SQL のスキルはそれほど高くありません。現在、私のシステムはこのクエリを生成しています。
SELECT
`User`.`id` AS `User_id`,
`User`.`name` AS `User_name`,
`Address`.`id` AS `Address_id`,
`Address`.`address` AS `Address_address`,
`Address`.`user_id` AS `Address_user_id`,
`Database`.`id` AS `Database_id`,
`Database`.`user_id` AS `Database_user_id`
FROM
`users` AS `User`,
`addresses` AS `Address`,
`databases` AS `Database`
GROUP BY `User_id`,`Address_id`,`Database_id`
HAVING
`User`.`id` = 1 AND
`Address`.`user_id` = `User`.`id` AND
`Database`.`user_id` = `User`.`id`;
これにより、この結果が生成されます。
User_id User_name Address_id Address_address Address_user_id Database_id Database_user_id
======= ========= ========== =============== =============== =========== ================
1 Nat 1 1234 1 1 1
1 Nat 1 1234 1 2 1
1 Nat 2 3456 1 1 1
1 Nat 2 3456 1 2 1
それは問題なく機能しますが、おそらく最善の方法で行っていないことはわかっています (実際の結合を使用する必要がありますか?)。これにより、ここからできることは非常に制限されます。
たとえば、oneToMany データベースの関係に影響を与えずに (oneToOne の関係で) 1 つのアドレスに制限したい場合。それを行うには、この SQL をどのように変更しますか?
これは、1 つのクエリで実行するのに最適なアイデアですか?