mysql - 列包含来自其他表列的值

标签 mysql sql algorithm join

我有一个表 Data 如下:

Name    Address     Country
A       PO 123 AF   Afghanistan
B       PO 23 AFG   AF
C       PO IND df1  AFG
D       PO 12345    USA

我想获取所有 AddressCountry 不同的记录。在上面的例子中,我需要记录 3 (Name = C),因为 Address 有“IND”,Country 是“AFG”。

注意:

  1. Country 可以是 ISO-2、ISO-3 或描述(例如“IN”、“IND”或“India”)
  2. Address 可能包含也可能不包含国家/地区名称 - 如果包含,则可能是 ISO-2、ISO-3 或说明。
  3. Country 详细信息存储在单独的 Country 表中,所有国家都存储为 -

    Id | Iso2 | Iso3 | Description
    

我确定,

  1. 首先,我们需要检查地址是否包含 ISO-2、ISO-3 或任何国家/地区的描述 - 地址是自由文本,国家/地区可以是文本中的任何位置,或者国家/地区甚至可能不存在于地址中 - 在这种情况下,我们需要跳过这些记录。
  2. 然后,如果 Address 有国家详细信息,我们需要检查它是否与国家列(同样可能包含 ISO-2、ISO-3 或描述)不同

在此先感谢您的帮助。

最佳答案

您是否希望在结果中包含美国行?

SQL Fiddle

MySQL 5.6 架构设置:

查询 1:

select * 
from Data
inner join country 
    on (
        Data.country = country.Iso2
        or Data.country = country.Iso3
        or Data.country = country.Description
        )
Where 

    Data.Address NOT like concat('%',country.Iso2,'%')
    and Data.Address NOT like concat('%',country.Iso3,'%')
    and Data.Address NOT like concat('%',country.Description,'%')

Results :

| Name |    Address | Country | Id | Iso2 | Iso3 |              Description |
|------|------------|---------|----|------|------|--------------------------|
|    C | PO IND df1 |     AFG |  1 |   AF |  AFG |              Afghanistan |
|    D |   PO 12345 |     USA |  3 |   US |  USA | united states of america |

查询 2:

select Data.*, country.*
from Data
inner join country 
    on (
        Data.country = country.Iso2
        or Data.country = country.Iso3
        or Data.country = country.Description
        )
left join country ca
    on (
        Data.Address like concat('%',ca.Iso2,'%')
        or Data.Address like concat('%',ca.Iso3,'%')
        or Data.Address like concat('%',ca.Description,'%')
        )
Where 
    Data.Address NOT like concat('%',country.Iso2,'%')
    and Data.Address NOT like concat('%',country.Iso3,'%')
    and Data.Address NOT like concat('%',country.Description,'%')
    and ca.id IS NOT NULL

Results :

| Name |    Address | Country | Id | Iso2 | Iso3 | Description |
|------|------------|---------|----|------|------|-------------|
|    C | PO IND df1 |     AFG |  1 |   AF |  AFG | Afghanistan |

关于mysql - 列包含来自其他表列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46344565/

相关文章:

php - 以样式显示来自 Mysql 表的数据

mysql - 使用 GROUP_CONCAT 选择多对多关系

sql - 创建 View 时出现 Oracle 错误 - ORA-01720

sql - 使用 sql 使用 select 查询的结果更新现有列

string - 在 O(mn) 中解决字符串对齐问题

javascript - 字符串操作的Nodejs内存不足错误

mysql - 使用 UNION 从结果集中的各个表中获取列值

mysql - 仅在一个查询中获取 RAND() 行而不使用 ORDER BY RAND()

php - 如何通过电子邮件响应影响 PHP 程序/mysql 数据库

javascript - 在 JavaScript 中可以实现数组减法的最快数量级是多少?