【发布时间】:2015-05-18 01:30:07
【问题描述】:
查询是从 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");
【问题讨论】:
-
哎呀,与其编写复杂的查询,不如规范化你的数据模型。
-
数据库不应该存储 CSV。而是创建查找表,例如
CompanyID | ZipCode,您将在其中为每个公司的每个 zip 提供一个条目。 -
哦,这个查询将是一场噩梦,与具有标准化数据的查询相比,它只是一个连接......
-
感谢您的所有回答。