我有三个表...用户,用户信息和配额级别。他们看起来像这样:
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(31) NOT NULL,
password VARCHAR(33) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE user_info (
userID INT UNSIGNED NOT NULL,
firstName VARCHAR(32),
lastName VARCHAR(32),
phone CHAR(14),
address VARCHAR(128),
birthdate DATE,
misc TEXT,
quotaLevel VARCHAR(32),
PRIMARY KEY (userID)
);
CREATE TABLE quota_levels (
quotaLevel VARCHAR(32) NOT NULL,
quota1 INT NOT NULL,
quota2 INT NOT NULL,
PRIMARY KEY (level)
);
每个用户在
users
表中都有一个条目,但不一定在user_info
表中有一个条目。 user_info
表中的每个用户都有一个quotaLevel
与quotaLevel
表中quota_levels
列相对应。 quotaLevel
的可能值为BRONZE,SILVER,GOLD和PLATINUM。我可以详细解释为什么要这样设置,但是说这种结构不能更改会更快。
如果用户存在,我想获取其
quota1
的quotaLevel
值。如果用户不存在,则应返回BRONZE的quota1
值。我想用一个查询做到这一点。能做到吗?如何做到?
最佳答案
SELECT u.Name,
COALESCE(ql.quota1, (SELECT quota1 FROM quota_level WHERE quotaLevel = 'BRONZE'))
FROM users u
LEFT JOIN user_info ui
INNER JOIN quota_level ql
ON ui.quotaLevel = ql.quotaLevel
ON u.id = ui.userID