2013-08-05 31 views
0

在MySql中,如何使用WHERE IN子句中的字符串函數結果?如何在WHERE IN子句中使用字符串函數結果

例如: -

select * from product p left join catalog c on c.catalogid in ((TRIM(BOTH ',' FROM (REPLACE(p.catalog_ids,',,',',')))));

這裏p.catalogs_ids = '36,37,38,';在

select * from product p left join catalog c on c.catalogid in ('36,37,38'); 

任何幫助

但上面的查詢結果將不勝感激。

+0

寫選擇,其中包括的功能 – developerCoder

+0

你可以在裏面,其中部分聲明'不要直接使用字符串作爲'IN(...)'的值。在這種情況下,您可以使用FIND_IN_SET,但它可能不會使用連接的索引。 – Vatev

+0

不是對這個問題的答案,而是通過在目錄ID和產品之間創建連接表來正常化數據庫模式,這將是適當的解決方案。 – Jon

回答

0

問題是你正試圖在字符串上使用IN。做一個字符串比較,而不是使用像:

SELECT * 
FROM product p 
    LEFT JOIN catalog c 
    ON ',' + p.catalog_ids + ',' LIKE '%,' + c.catalogid + ',%' 

這是一個與額外的逗號有點令人費解,但這是爲了確保比賽是整數,而不是一個號碼的一部分。你沒有說什麼類型採用catalogId是這樣,你可能需要投它像這樣:

SELECT * 
FROM product p 
    LEFT JOIN catalog c 
    ON ',' + p.catalog_ids + ',' LIKE '%,' + CAST(c.catalogid AS CHAR) + ',%' 
0

你也許尋找這個

select * from product p 
left join catalog c on c.catalogid in (',36,',',37,',',38,'); 
相關問題