mysql - if else语句mysql

标签 mysql sql

我有 4 个表:

  • 城镇
  • 部门
  • 地区
  • 国家

一个 department 有一个指向 region 的外键和一个指向 Countryregion

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

现在我想做一个 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/

相关文章:

java - 需要在 5 秒内使用 hibernate 在 mysql 中插入 100000 行

php - PHP/MySQL 消息系统

sql - 在 PostgreSQL 中不可能在两个兄弟表之间映射表?

mysql查询返回匹配元素列表的列表

c++ - qt里面的mysql创建过程(create语句)

php - SQL:动态扩展搜索条件

php - 如何从列表 MySQL 中删除特定数字

mysql - 根据计数结果选择不同的数据

mysql - 如何仅在 mysql 中获取最小组行?

sql - Visual Studio 2010 的 SQL 架构和数据比较 - 可以从代码访问吗?