2012-07-07 46 views
3

我想SQL查詢其給出輸出的concat串如何使用在節中的MySQL

SQL查詢

SELECT GROUP_CONCAT(nm) FROM xyz WHERE xyz.id IN (REPLACE(abc,"|",',')) 

其中ABC是字符串等替換功能1 | 2 | 3 | 4這是XYZ表的IDS 上述查詢只給出abc.I事情第一ID的納米它創建像

SELECT GROUP_CONCAT(nm) FROM xyz WHERE xyz.id IN ("1,2,3,4") 

查詢,以便(「)可以創建親任何人都可以幫忙。

+0

可能的[存儲過程中的SQL IN子句]的副本(http://stackoverflow.com/questions/11354287/sql-in-clause-in-stored-procedure) – 2012-07-07 08:08:04

+0

@ChrisGessler - 這是標記爲MySQL的問題你在SQL Server中鏈接。 – MatBailie 2012-07-07 08:26:10

+0

@Dems - 仍然與動態IN子句相關,並提到了幾個解決方案,比如實現分割函數等等......同樣的技巧可以很容易地應用到MySql – 2012-07-07 08:39:06

回答

3

您可以使用LIKE,(但當時其不打算使用指數法)

SELECT GROUP_CONCAT(nm) 
FROM xyz 
WHERE CONCAT('|', abc, '|') LIKE CONCAT('%|', xyz.id, '|%'); 
+0

MySQL是否有用戶定義的表值函數?所以OP可以使用WHERE id IN((SELECT split(@list,','))'? – MatBailie 2012-07-07 08:24:20

2

您可以使用INSTR像這樣:

SELECT GROUP_CONCAT(nm) 
FROM xyz 
WHERE INSTR(CONCAT('|', abc, '|'), CONCAT('|', xyz.id, '|')) > 0 

或者你可以實現一個分裂的功能或使用動態SQL。

+0

instr和like之間有速度差異嗎? – 2012-07-07 09:07:20

+0

@AndriyM我知道LIKE可以做更多的INSTR,但是如果你只需要INSTR的功能,我是否可以使用INSTR獲得更快的查詢,或者我可以繼續使用LIKE作爲im用於 – 2012-07-07 09:40:15

+0

@PugganSe:是的,這就是我錯過了你的問題,這就是爲什麼我刪除了我的評論。不會看到它,我錯了。:)對不起,我的那件傻事。 – 2012-07-07 09:52:10