我有一个表 Data
,如下所示:
Name Address Country
A PO 123 AF Afghanistan
B PO 23 AFG AF
C PO IND df1 AFG
D PO 12345 USA
我想获取Address
与Country
不同的所有记录。在上面的例子中,我需要记录3(Name
= C),因为Address
有“IND”而Country
是“AFG”。
注意:
Country
可以是ISO-2,ISO-3或描述(例如“IN”,“IND”或“India”)Address
可能包含也可能不包含国家/地区名称 - 如果包含,则可以是ISO-2,ISO-3或说明。 Country
详情存储在单独的国家/地区表格中,并将所有国家/地区存储为 -
Id | Iso2 | Iso3 | Description
我确定,
提前感谢您的帮助。
答案 0 :(得分:0)
你想在你的结果中使用USA吗?
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 |