【问题标题】:MySQL IN problemMySQL IN 问题
【发布时间】:2009-07-26 08:48:36
【问题描述】:

我正在尝试使用 IN 中另一个字段的值。

SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (1,2,3)
GROUP BY types.id

作品

SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (auth_users.types)
GROUP BY types.id

没用

http://pastebin.com/m76ae0596 更多信息可以在这里找到

auth_users.types = 1,2,3

【问题讨论】:

  • 根据您的 pastebin,您似乎在 auth_users.types 中存储了一个逗号分隔的字符串。是这样吗? auth_users.types = '1,2,3'。如果是这样,我强烈建议更改您的架构,尝试加入此字段是一个坏主意。

标签: mysql in-function


【解决方案1】:

您需要使用FIND_IN_SET - 请参阅此问题:MySql : Select statement using IN operator

【讨论】:

    【解决方案2】:

    很遗憾,IN (...) 不会尝试解析 varchar-field 值来提取您要匹配的值。

    它基本上只是检查“types.id”是否是“1、2、3”之一(即不是 1、2 或 3,而是实际的单个值“1、2、3”。)

    解决此问题的一种方法是在数据库中创建一个函数,该函数返回一个结果集,并获取该 varchar 值,对其进行解析,并为您的示例返回 3 行。

    除此之外,您需要重写以使用 LIKE(这将执行得非常糟糕),或者您需要自己解析这些值并将结果直接放入 SQL 中。

    【讨论】:

      【解决方案3】:

      试试row subqueries:

       SELECT column1,column2,column3
         FROM t1
         WHERE (column1,column2,column3) IN
               (SELECT column1,column2,column3 FROM t2);
      

      编辑:

      实际上,查看您的 pastebin,您是否将“1,2,3”作为 varchar 存储在一行中?那是行不通的。

      【讨论】:

        【解决方案4】:

        我猜他正在寻找一个简单的加入

        LEFT JOIN auth_users ON types.id = auth_users.types

        在哪里 auth_users.id (8,9)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-16
          相关资源
          最近更新 更多