代码之家  ›  专栏  ›  技术社区  ›  Gazler

SQL选择默认值的层次结构

  •  2
  • Gazler  · 技术社区  · 14 年前

    我有一个表格,格式如下:

    +---+---+--------+
    | u | i | value  |   
    +---+---+--------+
    | 0 | 1 | Value1 |
    | 0 | 2 | Value2 |
    | 0 | 3 | Value3 |
    | 8 | 2 | Value4 |
    | 9 | 2 | Value5 |
    | 9 | 3 | Value6 |
    +---+---+--------+
    

    用户ID 7(仅默认值)

    Value1
    Value2
    Value3
    

    用户Id 8(2个默认值,1个唯一值)

    Value1
    Value4
    Value3
    

    Value1
    Value5
    Value6
    

    1 回复  |  直到 14 年前
        1
  •  3
  •   Peter Lang    14 年前
    SELECT COALESCE( usr.value, def.value ) AS value
    FROM your_table def
    LEFT JOIN your_table usr ON ( usr.i = def.i AND usr.u = your_user )
    WHERE def.u = 0
    

    这将选择其中的所有记录 u=0 左键加入所请求用户的记录。

    如果它们存在,则从那里取值,否则取默认值(使用 COALESCE ).

    u=0 )存在。