我有三个表... users,user_info和quota_levels。它们看起来像这样:
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
的可能值为青铜色,银色,黄金色和白金色。
我可以用这种方式详细解释为什么设置它,但只是说这个结构不能改变会更快。
如果用户存在,我希望获得quota1
的{{1}}值。如果用户不存在,则应返回BRONZE的quotaLevel
值。
我想通过 ONE 查询来执行此操作。可以这样做吗?
答案 0 :(得分:2)
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