如果是else语句mysql

时间:2012-11-16 12:22:13

标签: mysql sql

我有4张桌子:

  • 区域
  • 国家

departmentregion的外键和regionCountry

的外键

town对其他表有3个外键,但只应填充其中一个,其他表必须为空。 这是因为你可以通过跟随外键到达城镇Country及其departementregion

现在我想创建一个SQL查询,它将所有城镇,区域,国家(如果已设置)返回给我。 而问题在于我不能根据哪个城镇的FK设置来制作不同的连接。

如何完成这项工作?

2 个答案:

答案 0 :(得分:3)

这个怎么样:

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包含在您选择的值中。

答案 1 :(得分:0)

这是一个显示值的查询。

select town.*,Department.*,Region.*,Country.* from town,Department,Region,Country where town.Dept_Id = Department.Dept and town.Region_Id = Region.Region_Id and town.Country_Id = Country.Countr_Id and Department.Region_Id = Region.Region_Id and Region.Country_Id = Country.Country_Id

您可以使用左连接查询代替此操作。此查询将花费更多的执行时间。左连接查询

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)