如何提取数据

时间:2014-04-16 06:56:10

标签: mysql

我们有两个表格 - placesads

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张桌子,但不知道怎么不包括这个"悉尼"。悉尼就是一个例子,但是有超过一个国家的数百个城市名称。

提出这个结果的正确查询是什么?

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相关联,其中包括国家/地区和城市。