我要根据地址中是否包含许多邮政编码来过滤一长串地址,如何构造SQL查询?
地址看起来像这样
+------------------------------------------+
| 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中处理数据。
答案 0 :(得分:1)
那么,您只需要JOIN
而不进行汇总吗?
SELECT a.*, p.Postcode
FROM [17-18] AS a INNER JOIN
[City Postcodes] AS p
ON instr(a.[Address], p.Postcodes) > 0;
如果只需要特定的邮政编码,则可以添加WHERE
子句。
请注意,这不会返回与邮政编码表不匹配的地址。如果需要所有地址,请使用LEFT JOIN
。
答案 1 :(得分:0)
如果我对您的理解正确,则希望将所有ID按邮政编码分组。您可以使用隐藏功能或通过Oracle LISTAGG来完成此操作:
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小提琴,您可以在其中测试代码:http://www.sqlfiddle.com/#!4/ca6844/1