MYSQL从子查询中选择列表中的项目

时间:2013-07-05 16:08:03

标签: mysql

提前感谢您提供的任何帮助。今天早上我被困在这个上几个小时,我搜索的东西似乎没什么帮助。

我将与客户端关联的帐户列表存储为我的数据库中的字符串,如下所示:

   | li.client_accounts   |
   +-----+----------------+
   |ID   |facility        |
   +-----+----------------+
   |23   |1010, 1020, 1025|
   +-----+----------------+

我正在尝试从另一个数据库中选择约会,其中帐号在列表中,使用如下子查询:

    SELECT * FROM li_appointments.li_appointments
    where app_client_id in (select facility from li_client_accounts where id = 23)

但是我的结果只显示client_id为1010的约会,而忽略其余的约会。我需要做些什么来实现这个目标?

2 个答案:

答案 0 :(得分:5)

它不起作用,因为IN子句需要一个字段列表。但是,在您的情况下,facility是逗号分隔值的字符串,而不是可查询列表。这是糟糕的设计。您需要使client_accounts表成为原子,如:

   | li.client_accounts   |
   +-----+----------------+
   |client_ID   |facility |
   +-----+----------------+
   |23   |1010|
   |23   |1015|
   |23   |1020|
   +-----+----------------+

答案 1 :(得分:0)

你不能那样使用IN()

你实际得到的是这样的:

SELECT * FROM li_appointments.li_appointments
    where app_client_id in ('1010, 1020, 1025')

这显然不是你想要的。

如果您想以关系方式使用它,您需要认真考虑规范化facility列。