0

我正在尝试使用 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
4

4 回答 4

1

不幸的是,IN (...)不会尝试解析 varchar-field 值来提取要匹配的值。

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

解决此问题的一种方法是在数据库中有一个函数,该函数返回一个结果集,并将该 varchar 值放入,解析它,并为您的示例返回 3 行。

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

于 2009-07-26T08:55:06.393 回答
1

您需要使用FIND_IN_SET- 看到这个问题:MySql : Select statement using IN operator

于 2009-07-26T09:23:30.377 回答
0

尝试行子查询

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

编辑:

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

于 2009-07-26T08:53:06.443 回答
0

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

左连接 auth_users ON types.id = auth_users.types

WHERE auth_users.id IN (8,9)

于 2009-07-29T14:58:42.660 回答