首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列包含来自其他表列的值。

列包含来自其他表列的值。
EN

Stack Overflow用户
提问于 2017-09-21 12:57:33
回答 1查看 78关注 0票数 3

我有一个表Data,如下所示:

代码语言:javascript
复制
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或描述(Ex )."IN“、"IND”或"India")
  2. Address可能包含国家名称,也可能不包含国家名称-如果包含,可以是ISO-2,ISO-3或描述.
  3. Country详细信息存储在单独的国家表中,并将所有国家存储为- Id _ Iso2 _ Iso3 _

我肯定,

  1. 首先,我们需要检查地址是否包含ISO-2,ISO-3或任何国家的描述-地址是一个免费的文本和国家可以在任何地方的文本或国家可能甚至不存在的地址-在这种情况下,我们需要跳过那些记录。
  2. 然后,如果地址有国家详细信息,我们需要检查它是否与国家列不同(后者可能包含ISO-2、ISO-3或描述)。

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-21 23:34:28

你想在你的结果中使用美国队吗?

SQL Fiddle

MySQL 5.6架构设置

查询1

代码语言:javascript
复制
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,'%')

结果

代码语言:javascript
复制
| 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

代码语言:javascript
复制
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

结果

代码语言:javascript
复制
| Name |    Address | Country | Id | Iso2 | Iso3 | Description |
|------|------------|---------|----|------|------|-------------|
|    C | PO IND df1 |     AFG |  1 |   AF |  AFG | Afghanistan |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46344565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档