我有一個函數返回VARCHAR。MySQL SELECT WHERE id IN function()
它將始終爲空字符串「」或單個ID「1」或ID「1,2,3,4,5」。
然後,我有這個疑問:
SELECT id, title FROM category WHERE id IN getIds(1);
但因爲它是作爲一個字符串,例如它只返回的第一個項目。 1,而不是1,2,3。
有沒有辦法告訴MySQL它應該使用它而不是字符串?
我有一個函數返回VARCHAR。MySQL SELECT WHERE id IN function()
它將始終爲空字符串「」或單個ID「1」或ID「1,2,3,4,5」。
然後,我有這個疑問:
SELECT id, title FROM category WHERE id IN getIds(1);
但因爲它是作爲一個字符串,例如它只返回的第一個項目。 1,而不是1,2,3。
有沒有辦法告訴MySQL它應該使用它而不是字符串?
由於MySQL不支持表值函數。您有2個選擇:
1)使用FIND_IN_SET https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set AND http://www.w3resource.com/mysql/string-functions/mysql-find_in_set-function.php「該函數返回函數的第一個參數中給出的字符串的位置,在第二個參數中給出的字符串中的逗號分隔列表中。列表的第一個元素爲1.如果在該集合中找不到該字符串,則返回0;如果其中一個參數爲NULL,則返回NULL。
SELECT id, title FROM category WHERE FIND_IN_SET(id, getIds(1)) > 0
2)填充一個臨時表,並與運營商IN
SELECT id, title FROM category WHERE id IN (SELECT Id FROM myTempTable)
方法#1似乎更適合於這種情況下使用它。
該號碼只是主要類別的ID。 – tttpapi
您也可以嘗試使用set(https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set)中的find,但我建議採用上述方法。通常,您希望最小化SQL中的字符串操作,並使用表比較。使其更易於維護和閱讀。儘可能避免動態SQL。 – Tom
如何返回表格?你能給我一個任何例子的鏈接嗎? – tttpapi