以下查询的语法是什么:
如果匹配引用(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)?
答案 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
答案 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