1

結合を構築しようとしていますが、MySQL で動作させることができません。方法があるはずです。

1.Setting2.User_Settingの 2 つのテーブルがあります(もちろんUser、ここでは必要ありません)。

構造

Setting.setting_id
設定説明
Setting.value_type
Setting.default_value

User_Setting.user_id
User_Setting.setting_id
User_Setting.value

Settingすべてのレコードを選択しUser_Setting、値がある場所で結合したい。古典的な外部結合は信じられますか?

私はこのクエリを持っています:

選択する
`User_Setting`.`user_id`,
`User_Setting`.`値`,
`Setting`.`setting_id`,
`Setting`.`default_value`,
`Setting`.`value_type`,
から
`User_Setting`
Right Join `Setting` ON `User_Setting`.`setting_id` = `Setting`.`setting_id`
どこ
`User_Setting`.`user_id` は NULL または
`User_Setting`.`user_id` = 1;

Userただし、 with user_id2 にUser_Setting特定の のレコードが存在する場合、これは機能しませんsetting_idが、Userwith user_id1 にはそのsetting_idレコードが保存されていません...

レコードが存在しない場合は NULLを使用しuser_idて、すべての設定を取得するクエリを持っている人はいますか?valueUser_Setting

4

2 に答える 2

2

これ(ユーザーが存在することを確認したい場合)

SELECT  `User_Setting`.`user_id`,
        `User_Setting`.`value`,
        `Setting`.`setting_id`,
        `Setting`.`default_value`,
        `Setting`.`value_type`,
FROM    user
CROSS JOIN
        setting
LEFT JOIN
        user_setting
ON      user_setting.user_id = user_id
        AND user_setting.setting_id = setting.setting_id
WHERE   user_id = 1

またはこれ(ユーザーが存在することを確認したくない場合):

SELECT  `User_Setting`.`user_id`,
        `User_Setting`.`value`,
        `Setting`.`setting_id`,
        `Setting`.`default_value`,
        `Setting`.`value_type`,
FROM    setting
LEFT JOIN
        user_setting
ON      user_setting.user_id = 1
        AND user_setting.setting_id = setting.setting_id
于 2009-08-03T13:59:51.033 に答える
0

通常、句に条件を追加して、WHERE結合されるテーブルのプライマリ if が null でないことを確認します。

于 2009-08-03T14:05:41.983 に答える