如果条目不存在,请选择默认值

时间:2012-01-10 21:30:33

标签: mysql

我有三个表... 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 查询来执行此操作。可以这样做吗?

1 个答案:

答案 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