如何使用IN查询?

时间:2013-08-20 05:37:36

标签: mysql sql

在mp_cities表中,city_name和city_id是字段

city_id        city
--------------------
  1            Chennai
  2            Bangalore
  3            Kerala

在个人资料表

user_email         city_type 
------------------------------
abc@gmail.com      1,2,3     

我使用以下查询

SELECT city_name 
  FROM mp_cities 
 WHERE city_id IN (SELECT city_type 
                     FROM profile 
                     WHERE  user_email='abc@gmail.com')

此查询将导致Chennai。 我必须得到所有的城市

3 个答案:

答案 0 :(得分:4)

您可以在MySQL中使用FIND_IN_SET()

SELECT  a.*
FROM        mp_cities a
                INNER JOIN  profile  b
                    ON FIND_IN_SET(a.city_id, b.city_type)
WHERE   b.user_email = 'abc@gmail.com'

但到目前为止我能想到的最好方法是正确地规范化表格。

mp_cities

  • city_id(PK)
  • 城市
  • 其他专栏

个人资料

  • user_id(PK)
  • 其他专栏

mp_cities _profile

  • city_id(FK)
  • user_id(FK)

答案 1 :(得分:3)

如果profile表格如下所示,您将获得所需的结果:

user_email     city_type
------------------------
abc@gmail.com  1
abc@gmail.com  2
abc@gmail.com  3

也就是说,内部SELECT必须返回多行,每行包含一个数字,而不是一行以逗号分隔的数字。

答案 2 :(得分:1)

尝试使用FIND_IN_SET()函数连接两个表,如下所示:

SELECT c.*
  FROM mp_cities c
  JOIN profile p
    ON FIND_IN_SET(c.city_id,p.city_type) > 0;

请参阅this SQLFiddle