我有这个简单的查询 - :
SET @rejects = "'song1','song2'";
SELECT * FROM media WHERE share_src IS NULL || share_src NOT IN(@rejects)
但这不起作用,并且还会显示share_src = song1
和share_src = song2
的行。
我的查询有什么问题。谢谢你的帮助......
答案 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)