1

我正在尝试建立一个连接,但我无法让它在 MySQL 中工作,我知道一定有办法。

我有两张桌子:1.Setting2.User_SettingUser当然,这里不需要)。

结构

设置.setting_id
设置.描述
设置.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`.`value`,
`设置`.`setting_id`,
`设置`。`default_value`,
`设置`。`value_type`,
从
`用户设置`
右加入 `Setting` ON `User_Setting`.`setting_id` = `Setting`.`setting_id`
在哪里
`User_Setting`.`user_id` 为 NULL 或
`User_Setting`.`user_id` = 1;

User但是,如果 a with user_id2 有某条User_Setting记录存在,这不起作用setting_id,但是Userwith user_id1 没有setting_id存储该记录...

有没有人查询所有设置都将被检索,如果记录不存在user_id,则为valueNULL ?User_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 是否不为空。

于 2009-08-03T14:05:41.983 回答