首页 文章

MySQL加入排除某些记录?

提问于
浏览
1

我正在尝试 Build 一个连接,但我不能让它在MySQL中工作,我知道必须有一种方法 .

我有两个表: 1. Setting2. User_Setting (当然 User 但这里不需要) .

Structure

Setting.setting_id
Setting.description
Setting.value_type
Setting.default_value

User_Setting.user_id
User_Setting.setting_id
User_Setting.value

我想选择所有 Setting 记录,并在有值的情况下加入 User_Setting . 我相信经典的外部联接?

我有这个问题:

SELECT
`User_Setting`.`user_id`,
`User_Setting`.`value`,
`Setting`.`setting_id`,
`Setting`.`default_value`,
`Setting`.`value_type`,
FROM
`User_Setting`
Right Join `Setting` ON `User_Setting`.`setting_id` = `Setting`.`setting_id`
WHERE
`User_Setting`.`user_id` IS NULL OR
`User_Setting`.`user_id` =  1;

但是如果带有 user_idUser 具有某个 setting_idUser_Setting 记录,则这不起作用,但 Useruser_id 1没有存储 setting_id 记录...

Does anybody have a query where ALL settings will be retrieved, with user_id and value NULL if the User_Setting record doesn't exist?

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
    
  • 0

    我通常在 WHERE 子句中添加一个条件来检查正在连接的表中的主要if是否为空 .

相关问题