我正在尝试构建一个连接,但我不能让它在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_Setting
有setting_id
条记录,而User
user_id
,则此功能无效{1}} 1没有存储setting_id
条记录...
如果user_id
记录不存在,是否会检索所有设置的查询,value
和User_Setting
为空?
答案 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是否为空。