0
該查詢將從CompanyListings中選擇所有記錄,其中CompanyZip列中的至少一個郵政編碼在CityToZipCodes表的ZipCodes列中出現一次。 ZipCodes和CompanyZip列都是TEXT數據類型,所有值將始終是用逗號分隔的數字列表。SQL列表中的一個值至少在列表中出現一次
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 -
+-----+-------------------+----------------------+
我曾嘗試使用LIKE和基於其他SO問題的幾個疑問,但是當這兩個表中的列值逗號分隔的名單,他們不工作。
SELECT *
FROM CompanyListings
WHERE CompanyZip IN (SELECT ZipCodes
FROM CityToZipCodes
WHERE City = "Atlanta");
ouch,而不是編寫複雜的查詢,你最好規範你的數據模型。 – dnoeth
數據庫不應該存儲CSV。而是創建諸如「CompanyID |」之類的查找表ZipCode',在那裏你將有一個每個公司每個zip的入口。 – JRLambert
可能是一個有趣的閱讀:http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad – Timo