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

简单SQL查询帮助

  •  1
  • jagamot  · 技术社区  · 14 年前

    表A

    Id    Name  
    1     Apple
    2     Mango
    3     Banana
    

    Id  Locale      Name_In_Lang
    1   es-ES       Apple[Spanish]
    1   it-IT       Apple[Italian]
    2   it-IT       Mango[Italian]
    

    假设用户请求西班牙语版本,那么查询应该返回表B中表A中每个记录的所有西班牙语版本。如果西班牙语版本不可用,那么只返回表A中相应的记录

    Id  Locale                  Name
    1   es-ES                   Apple[Spanish]      
    2                           Mango
    3                           Banana
    

    1 回复  |  直到 14 年前
        1
  •  2
  •   Daniel Vassallo    14 年前

    看起来你需要一个 LEFT JOIN

    SELECT     ta.id, tb.locale, NVL(tb.name_in_lang, ta.name) name
    FROM       tableA ta
    LEFT JOIN  tableB tb ON (tb.id = ta.id AND tb.locale = ?)
    

    这个 NVL() 函数允许您在遇到空值时替换值。

    的输出 es-ES

    +------+--------+----------------+
    | id   | locale | name           |
    +------+--------+----------------+
    |    1 | es-ES  | Apple[Spanish] |
    |    2 | NULL   | Mango          |
    |    3 | NULL   | Banana         |
    +------+--------+----------------+