mysql - SQL 值列表中的一个值在列表中至少出现一次

标签 mysql sql

该查询将从 CompanyListings 中选择所有记录,其中 CompanyZip 列中的邮政编码至少在 CityToZipCodes 表的 ZipCodes 列中出现过一次。 ZipCodes 和 CompanyZip 列都是 TEXT 数据类型,所有值始终是逗号分隔的数字列表。

CityToZipCodes
+----+---------+-----------------------------------+
| ID | City    | ZipCodes                          -
+----+---------+-----------------------------------+
|  1 | Atlanta | 30028, 30040, 30041, 30107, 30151 -
+----+---------+-----------------------------------+

CompanyListings
+-----+-------------------+----------------------+
| ID  | CompanyName       | CompanyZip           -
+-----+-------------------+----------------------+
|  11 | BBB HVAC Company  | 30028, 30188, 30107  -
|  12 | Americool         | 30520, 30151, 30041  -
+-----+-------------------+----------------------+

我已经根据其他 SO 问题尝试使用 LIKE 和 IN 进行一些查询,但当两个表列值都是逗号分隔列表时,它们不起作用。

SELECT * 
FROM CompanyListings
WHERE CompanyZip IN (SELECT ZipCodes
FROM CityToZipCodes
WHERE City = "Atlanta");

最佳答案

您最好创建新表来存储公司 ID 和关联的每个邮政编码。对城市也做同样的事情。之后,您可以通过适当的索引有效地使用 IN。

如果您必须对现有数据执行此操作,则需要创建一个小函数,该函数接受两个邮政编码字符串,当其中存在任何匹配的邮政编码时返回 true。然后您可以使用如下函数连接两个表:

 Select * from companylist c left join citylist t on match_zips(c.zips,t.zips)>0

速度会很慢。

关于mysql - SQL 值列表中的一个值在列表中至少出现一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289407/

相关文章:

php - CakePHP 3 - 从用户正在关注的用户加载帖子

sql - MySQL - 显示按名称分组的名称和地址行,其中名称出现多次

sql - Oracle - 相关子查询问题

php - 我是否正确使用 MATCH() ?

sql - 在 Perl 中执行 SQL 文件

sql - 从另一个 MySQL 表计算平均值

java - JDBC 连接到 MySQL 需要哪些文件?

php - 使用php使用mysql中两个表中的相同列从2个表中检索数据

mysql - 从 mysql 到 Hbase 的近实时同步

mySQL union 没有按预期工作