mysql - 连接表并在mysql中的两个不同表中搜索数据

标签 mysql sql database merge

表 1:完整

id name country street
1  ab   xx      xxx
2  bd   xx      xxx
3  dc   xx      xxx

表2:old_data

id language area_name  market_name
1  en       xx         xxx
2  cz       xx         xxx

表 3:new_data

id language area market
2  fr       xx   xxx
3  cz       xx   xxx

现在,使用 MySQL,我想合并表并查找相关详细信息。 逻辑是:如果“new_data”中不可用,则只能在“old_data”中找到它

输出:

id name country street language area market
1  ab   xx      xxx    en       xx   xxx
2  bd   xx      xxx    fr       xx   xxx
3  dc   xx      xxx    cz       xx   xxx

注意:表 1 的行数 = 输出表的行数。

最佳答案

您可以左连接这两个表,然后使用coalesce()来选择相关值:

select 
    t.*, 
    coalesce(n.language, o.language) language,
    coalesce(n.area, o.area) area,
    coalesce(n.market, o.market) market
from table_full f
left join table_old_data on o.id = f.id
left join table_new_data n on n.id = f.id

这假设语言区域市场永远不null。如果这不是 cas,那么您可以将 coalesce() 表达式更改为:

select 
    t.*, 
    case when n.id is not null then n.language else o.language end language,
    case when n.id is not null then n.area else o.area end area,
    case when n.id is not null then n.market else o.market end market
from table_full f
left join table_old_data on o.id = f.id
left join table_new_data n on n.id = f.id

关于mysql - 连接表并在mysql中的两个不同表中搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59877125/

相关文章:

php - 验证数据库日期和 JQuery 日期

MySQL 到 PostgreSQL 的转换

html - 使用 mysql 查询生成大型 html 表非常慢 - 4000+ 行查询

php - Apache/MySQL 问题

mysql - 无法在无序表中使用限制和偏移量获取中间行

sql - 仅使用 SQL 计算一对多关系中的子记录数

php - 远程SQL连接: mysqli_connect(): (HY000/1045): Access denied for user

mysql - 从时间线到时间戳表的 SQL 连接类别

mysql - SQL:过滤计算列

database - "A parent object will have up to 2 children"之类的规则是否应该在数据库中重复