Mysql:查询没有给出IN子句和内部查询的准确结果

时间:2015-05-02 08:23:41

标签: mysql

我试图从zip_id获取邮政编码,这些邮政编码内部存储在屏幕下方的公司服务表中会给您一个明确的想法

我写了这个查询  enter image description here

公司服务表 enter image description here

请建议您宝贵的意见。提前谢谢。

1 个答案:

答案 0 :(得分:2)

如前所述,您的数据库方案设计得不是很好,甚至违反了1st normal form。您需要另一个表,您可以存储serv_area_idzip_code(可能有多行用于信号serv_area_id)并在此表中搜索并最终加入原始表。

然而,为了获得您描述的结果,您不能使用IN运算符,因为它以表格形式对值和多个值进行操作(通过嵌套SELECT显式或枚举文字显式(val1, ..., valN))。我会尝试一些字符串匹配,如下图所示。但是,考虑它是一个丑陋的黑客,而不是正确的解决方案(!)

SELECT zip FROM cities_extended WHERE (
    SELECT GROUP_CONCAT(',', serv_are_zipcodes)
    FROM company_service_areas WHERE ...
) LIKE concat('%(', id, ')%')