2017-06-12 47 views
1

我有這個問題。我有兩個表,我想從中推斷出這些值,具體來說,在一個表的字段中是第二個表的ID,由第二個表分隔; 使用該方法:mysql select取代函數

SELECT name 
    FROM tab1 
WHERE id in (SELECT REPLACE(field,";",",") as idresult 
       from tab2 
       where tab2.id=1) 

從這個查詢我希望有更多的行,因爲在TAB2字段有這些值(1; 2; 3; 4; 5)

如果不運行的相同程序選擇替換我得到正確的結果 即::

SELECT name FROM tab1 
WHERE id in (1,2,3,4,5) 

它是正確的。我應該使用更換你有建議嗎?

+2

您可以使用FIND_IN_SET,但規範化是一個更好的主意。 – Strawberry

回答

0

您在WHERE子句中遇到問題:in用於比較值(列)的值和向量。在你的情況下,你檢查​​是否至少等於idresult的結果之一。

idresult只是一個列 - 現在內,而不是;更換後的

您可以使用MySQL locate function,以便找到,如果有一個字符串的子字符串:

SELECT name 
    FROM tab1, tab2 
WHERE LOCATE(tab2.id, tab2.field)>0 
0

我的理解是,TAB2查詢將爲您提供逗號分隔字符串,它應該被用來作爲TAB1過濾器。爲此,您可以使用MySQL中的FIND_IN_SET命令,如下所示:

select name from tab1 where find_in_set(id, (SELECT REPLACE(field,";",",") from tab2 where tab2.id=1)) > 0; 
+0

好,現在正在工作!謝謝 –