0

我有这个简单的查询-:

SET @rejects = "'song1','song2'"; 
SELECT * FROM media WHERE share_src IS NULL || share_src NOT IN(@rejects)

但这不起作用,并且还显示带有share_src = song1and的行share_src = song2

我的查询有什么问题。感谢帮助..

4

4 回答 4

1

IN不适用于一个字符串。您要么使用真正的逗号分隔值,而不仅仅是一个字符串,要么使用Prepared Statement

这样可行:

SELECT * FROM media 
WHERE share_src IS NULL || share_src NOT IN('song1', 'song2')

但这不是

SELECT * FROM media 
WHERE share_src IS NULL || share_src NOT IN("'song1','song2'")
于 2013-03-23T13:39:45.717 回答
1

这是动态sql的版本

SET @rejects = "'song1','song2'"; 
SET @sql = NULL;

SET @sql = CONCAT('SELECT * 
                    FROM media 
                    WHERE share_src IS NULL OR share_src NOT IN(',@rejects,')');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2013-03-23T13:43:09.187 回答
0

您将其视为一个字符串。

您将不得不将整个语句作为字符串执行...(在 Oracle 中EXECUTE IMMEDIATE

于 2013-03-23T13:39:18.267 回答
0

尝试使用 find_in_set 函数

SET @rejects = "song1,song2"; 
SELECT * FROM media WHERE share_src IS NULL ||  NOT FIND_IN_SET(share_src, @rejects)
于 2013-03-23T14:17:18.163 回答