我试图使用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
有帮助吗?

解决方案

您需要使用FIND_IN_SET - 看这个问题: MySQL的:使用IN操作符Select语句

其他提示

不幸的是,IN (...)不会尝试解析VARCHAR字段的值来提取您要匹配的值。

它基本上只检查如果 “types.id” 是 “1,2,3”(即,不为1,2或3,但实际单值 “1,2,3”。)

要解决这将是具有在返回一个结果数据库的函数,并且需要在VARCHAR值,解析它,并为您的示例返回3行。单程

除此之外,你需要或者改写用LIKE(将可怕执行),或者您需要解析自己的那些值,并将结果置于直接的SQL。

尝试行子查询

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

编辑:

其实,看你的引擎收录,你存储“1,2,3”中单列为VARCHAR?这是行不通的。

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

LEFT JOIN auth_users ON types.id = auth_users.types

WHERE auth_users.id IN(8,9)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top