0

以下查询的语法是什么:

如果存在匹配引用(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)?

4

2 回答 2

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 演示

于 2012-08-04T17:59:13.873 回答
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
于 2012-08-04T17:03:45.557 回答