IN()不工作 - MySQL

时间:2013-03-23 13:37:48

标签: mysql

我有这个简单的查询 - :

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

但这不起作用,并且还会显示share_src = song1share_src = song2的行。

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

4 个答案:

答案 0 :(得分:1)

IN无法与一个字符串一起使用。您可以使用真正逗号分隔的值而不只是一个字符串或使用准备语句

有效:

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'")

答案 1 :(得分: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;

答案 2 :(得分:0)

你将这视为一个字符串。

你必须以字符串形式执行整个语句而不是...... (在Oracle EXECUTE IMMEDIATE

答案 3 :(得分:0)

尝试使用find_in_set函数

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