Sql 在单独的邮政编码列表中筛选地址列表

Sql 在单独的邮政编码列表中筛选地址列表,sql,ms-access,Sql,Ms Access,我想根据地址是否包含多个邮政编码中的任何一个来筛选一长串地址,如何构造SQL查询 地址是这样的 +------------------------------------------+ | address | +------------------------------------------+ | 69, example entry road, London, wa13 657 | | 87, example entry ro

我想根据地址是否包含多个邮政编码中的任何一个来筛选一长串地址,如何构造SQL查询

地址是这样的

+------------------------------------------+
|              address                     |
+------------------------------------------+
| 69, example entry road, London, wa13 657 |
| 87, example entry road, London, eC2B 984 |
+------------------------------------------+
+-----------+
| Postcodes |
+-----------+
| Wa13 657  |
| eC2B 984  |
| eq8 987   |
+-----------+
像这样的邮政编码

+------------------------------------------+
|              address                     |
+------------------------------------------+
| 69, example entry road, London, wa13 657 |
| 87, example entry road, London, eC2B 984 |
+------------------------------------------+
+-----------+
| Postcodes |
+-----------+
| Wa13 657  |
| eC2B 984  |
| eq8 987   |
+-----------+
地址表有一个
ID

我最接近的是以下几点:

SELECT p.Postcodes, COUNT(*)
FROM [City Postcodes] AS p 
INNER JOIN [17-18] AS a ON (a.[Address], p.Postcodes) > 0
GROUP BY p.Postcodes;

然而,这只是统计每个邮政编码的出现次数。我真正想做的是过滤地址表并根据邮政编码识别ID,这样我就可以获取ID并在Excel中处理数据。

那么,您只需要加入
而不需要聚合

SELECT a.*, p.Postcode
FROM [17-18] AS a INNER JOIN
     [City Postcodes] AS p
     ON instr(a.[Address], p.Postcodes) > 0;
如果只需要特定的邮政编码,可以添加
WHERE
子句


请注意,这不会返回与邮政编码表不匹配的地址。如果您想要所有地址,请使用
左联接

如果我理解正确,您需要所有ID按邮政编码分组。您可以使用concatation函数或Oracle、Listag:

SELECT p.POSTAL, LISTAGG(a.ID, ',') WITHIN GROUP (ORDER BY p.POSTAL) ids 
FROM Address a 
INNER JOIN Postcodes p ON a.POSTAL LIKE p.POSTAL 
GROUP BY p.POSTAL;
我创建了一个sql FIDLE,您可以在其中测试代码:

  • 有了mysql,您可以使用group_concat:
  • 使用SQL Server,您可以使用Stuff()+字符串连接:

哪里有问题。。。在(…)?
中识别ID
。。。哪些身份证?在您的查询中,我没有看到任何提到的
ID
列。我对access和sql非常陌生,因此还没有找到集成ID列的方法,但address表中有一个。