2009-07-26 107 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)