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

可能不存在的MySQL记录联接

  •  3
  • vonconrad  · 技术社区  · 14 年前

    SELECT <columns> FROM table1 
    INNER JOIN table2 ON table1.id = table2.table1_id
    INNER JOIN table3 ON table1.id = table3.table1_id
    WHERE table3.column1 != 'foo' AND <other_conditions>
    LIMIT 1;
    

    问题是——我希望查询返回一个结果,而不管 table3 表3 如果存在,我想检查该记录是否具有某个列值。如果记录在 表3

    有什么线索吗?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Guffa    14 年前

    在表上使用左联接。如果不存在相应的记录,则表中的值将为空,因此可以使用coalesce获取可与字符串进行比较的值:

    SELECT <columns> FROM table1 
    INNER JOIN table2 ON table1.id = table2.table1_id
    LEFT JOIN table3 ON table1.id = table3.table1_id
    WHERE COALESCE(table3.column1, '') != 'foo' AND <other_conditions>
    LIMIT 1
    
        2
  •  3
  •   Tomalak    14 年前

    SELECT 
      <columns> 
    FROM
      table1 
      INNER JOIN table2 ON table2.table1_id = table1.id
      LEFT  JOIN table3 ON table3.table1_id = table1.id AND table3.column1 <> 'foo' 
    WHERE
      <other_conditions>
    LIMIT 1;
    
        3
  •  0
  •   Ruben    14 年前

    您需要使用外部联接来包含表3,而不是内部联接。