我有 4 个表:
- 城镇
- 部门
- 地区
- 国家
一个 department
有一个指向 region
的外键和一个指向 Country
的 region
一个 town
有 3 个指向其他表的外键,但只应填充其中一个,其他必须为空。
这是因为您可以通过外键到达城镇的 Country
及其 departement
或 region
。
现在我想做一个 SQL 查询,返回所有城镇及其部门、地区、国家(如果设置)。 问题是我无法根据设置的城镇 FK 进行不同的连接..
如何完成这项工作?
最佳答案
这个怎么样:
SELECT …
FROM Town
LEFT JOIN Department ON Department.id = Town.department
LEFT JOIN Region ON Region.id = COALESCE(Town.region, Department.region)
LEFT JOIN Country ON Country.id = COALESCE(Town.country, Region.country)
COALESCE
从其参数中获取第一个非 NULL
值。因此,在这种情况下,Town
中的值会覆盖其他设置。当您声明具有区域引用的城镇将没有部门引用时,其中只有一个应该是非 NULL
,因此如果您的数据如您所说,顺序无关紧要。 LEFT JOIN
确保您获得没有匹配的表的 NULL
值。如果您只需要国家/地区的 ID,您可以省略最后一个连接并将 COALESCE
包含到您选择的值中。
关于mysql - if else语句mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13416505/