JOIN的MySQL语法取决于条件

时间:2012-08-04 16:59:24

标签: mysql join if-statement

以下查询的语法是什么:

如果匹配引用(Table1ID)存在,则获取Table1和JOIN Table2中的所有列,否则JOIN Table3。

简化的数据库结构或多或少如下

 Table1
 ID     Type
 1      std

 Table2
 ID     Table1ID    Title    Language
 1      1           Test     en

 Table3
 ID     Table1ID    Title    Language     Flag
 1      1           Other    en           1

此外,我现在意识到Table3将有多个引用单个Table1.id的条目。如何限制它只返回每个结果的最新条目(具有最高id)?

2 个答案:

答案 0 :(得分:2)

如果您不希望每个联接都有一组完整的列,这可能就是您要找的内容:

SELECT   *
FROM     (     
         SELECT    a.ID AS Table1ID, a.Type, b.ID, b.Title, b.Language, NULL AS Flag
         FROM      Table1 a
         JOIN      Table2 b ON a.ID = b.Table1ID

         UNION ALL

         SELECT    a.ID, a.Type, c.ID, c.Title, c.Language, c.Flag
         FROM      Table1 a
         LEFT JOIN Table2 b ON a.ID = b.Table1ID
         JOIN      Table3 c ON a.ID = c.Table1ID
         JOIN      (
                   SELECT   MAX(id) AS maxid
                   FROM     Table3
                   GROUP BY Table1ID
                   ) d ON c.ID = d.maxid
         WHERE     b.ID IS NULL
         ) a
ORDER BY a.Table1ID

SQLFiddle Demo

答案 1 :(得分:1)

这是一种方法。

select table1.id, table1.type, ifnull(table2.title, table3.title)
from table1
left join table2 on table1.id = table2.table1ID
left join table3 on table1.id = table3.table1ID