2009-07-26 82 views
0

我正在尝试使用IN中另一个字段的值。MySQL 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 
+0

根据你的pastebin,你似乎在auth_users.types中存储逗号分隔的字符串。这是吗? auth_users.types ='1,2,3'。我强烈建议改变你的模式,如果是的话,试图加入这个领域是一个坏主意。 – hobodave 2009-07-26 09:09:17

回答

0

发现尝试row subqueries

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

编辑:

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

1

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

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

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

除此之外,您需要重写为使用LIKE(这将会非常可怕),或者您需要自己解析这些值并将结果直接放入SQL中。

0

我猜他正在寻找一个简单连接

LEFT JOIN auth_users ON types.id = auth_users.types

WHERE auth_users。 id IN(8,9)