我们有两个表格 - places
和ads
places
+---------+--------------+-----------+
| PlaceID | CountryCode | Name |
+---------+--------------+-----------+
| 1 | AU | Sydney |
| 2 | CA | Sydney |
| 3 | US | Miami |
| 4 | AU | Canberra |
+---------+--------------+-----------+
ads
+------+--------+-----------+
| AdID | Name | Location |
+------+--------+-----------+
| 1 | Test | Canberra |
| 2 | Test2 | Sydney |
| 3 | Test3 | null |
| 4 | Test4 | Delhi |
| 5 | Test5 | Miami |
+------+--------+-----------+
我们需要根据此国家/地区提取不属于澳大利亚的广告数据。但是,在广告表下,没有指定国家/地区。这个困境实际上是因为悉尼属于2个国家,我们希望不包括AdID = 2,尽管是悉尼。
结果:
+------+--------+-----------+
| AdID | Name | Location |
+------+--------+-----------+
| 4 | Test4 | Delhi |
| 5 | Test5 | Miami |
+------+--------+-----------+
我们可以加入这2张桌子,但不知道怎么不包括这个"悉尼"。悉尼就是一个例子,但是有超过一个国家的数百个城市名称。
提出这个结果的正确查询是什么?
答案 0 :(得分:2)
select a.*
from places p
inner join ads a on p.Name=a.Location
where p.CountryCode<>'AU'
Edited
基于已修改的问题和要求
select *
from ads
where isnull(Location,'') not in
(select isnull(Name,'') from places where CountryCode<>'AU')
and isnull(Location,'')<>''
<强> SQL Fiddle 强>
答案 1 :(得分:0)
鉴于您问题中的结构,无法实现您想要的效果。这完全是不合逻辑的,不幸的是不可能。当你没有定义关系时,你如何期望在ad
和一个国家之间建立联系?
你的两张桌目前没有任何关系。您的表格 应如下所示:
locations
+----+---------+--------+
| id | country | city |
+----+---------+--------+
| 1 | AU | Sydney | <----+
| 2 | CA | Sydney | <--+ |
+----+---------+--------+ | |
| |
ads | |
+----+------+------------+ | |
| id | name | locationId | | |
+----+------+------------+ | |
| 1 | Test | 2 | <-+ |
| 2 | Test | 1 | <---+
+----+------+------------+
这样,ads
可能与整个locations
相关联,其中包括国家/地区和城市。