MySQL加入排除某些记录?

时间:2009-08-03 13:52:13

标签: sql mysql outer-join

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

我有两张桌子: 1。 Setting 2。 User_Setting (以及当然 User ,但此处不需要)。

结构

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 user_id 2的某个User_Settingsetting_id条记录,而User user_id,则此功能无效{1}} 1没有存储setting_id条记录...

如果user_id记录不存在,是否会检索所有设置的查询,valueUser_Setting为空?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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