我有这个简单的查询-:
SET @rejects = "'song1','song2'";
SELECT * FROM media WHERE share_src IS NULL || share_src NOT IN(@rejects)
但这不起作用,并且还显示带有share_src = song1
and的行share_src = song2
。
我的查询有什么问题。感谢帮助..
我有这个简单的查询-:
SET @rejects = "'song1','song2'";
SELECT * FROM media WHERE share_src IS NULL || share_src NOT IN(@rejects)
但这不起作用,并且还显示带有share_src = song1
and的行share_src = song2
。
我的查询有什么问题。感谢帮助..
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'")
这是动态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;
您将其视为一个字符串。
您将不得不将整个语句作为字符串执行...(在 Oracle 中EXECUTE IMMEDIATE
)
尝试使用 find_in_set 函数
SET @rejects = "song1,song2";
SELECT * FROM media WHERE share_src IS NULL || NOT FIND_IN_SET(share_src, @rejects)