2011-06-21 78 views
0

,如果我做一個選擇是這樣的:在MySQL()的奇怪行爲

SELECT `id` FROM `table` WHERE `id` IN (1,2,3) 

它的工作原理,但如果我這樣做:

SELECT `id` FROM `table` 
WHERE `id` IN (`column`) 

,其中列有值的內部列:1 ,2,3-它只返回1

這是查詢:

SELECT a.id, (
    SELECT f.name FROM facs f WHERE f.id IN(REPLACE(a.facs, ';', ',')) 
) AS facs 
FROM ads a LIMIT 0, 10 

感謝

+2

很難說沒有看到你的表結構和一些示例數據。另外,在實際的查詢中,您在列列表中使用表別名「a」,但是您沒有在表列表中定義別名。 –

回答

2

可以使用FIND_IN_SET()功能:

SELECT a.id, (
    SELECT f.name 
    FROM facs f 
    WHERE FIND_IN_SET(f.id, REPLACE(a.facs, ';', ',')) 
) AS facs 
FROM ads LIMIT 0, 10 

注:由於這是一個用函數,索引不能使用,你應該考慮存儲facs在多行中。

+0

thans一百萬:) – cigraphics

3

我想,而不是

SELECT `id` FROM `table` 
WHERE `id` IN (`column`) 

你應該這樣做:

SELECT `id` FROM `table` 
WHERE `id` IN (SELECT `column` FROM `table`) 
+0

不回答問題。 –

+0

我認爲它回答了您的問題的第一部分...其餘部分,您可以提供更多信息,如表格a,廣告,展位? – Matthieu

+0

,將無法正常工作,因爲列有這樣的值:1; 2; 3; 4,這就是爲什麼我不得不使用替換函數 – cigraphics