私はこの簡単なクエリを持っています -:
SET @rejects = "'song1','song2'";
SELECT * FROM media WHERE share_src IS NULL || share_src NOT IN(@rejects)
しかし、これは機能せず、 と の行も表示されshare_src = song1
ますshare_src = song2
。
私のクエリの問題は何ですか。手伝ってくれてありがとう..
私はこの簡単なクエリを持っています -:
SET @rejects = "'song1','song2'";
SELECT * FROM media WHERE share_src IS NULL || share_src NOT IN(@rejects)
しかし、これは機能せず、 と の行も表示されshare_src = song1
ますshare_src = song2
。
私のクエリの問題は何ですか。手伝ってくれてありがとう..
IN
1 つの文字列では機能しません。1つの文字列だけでなく、実際にコンマで区切られた値を使用するか、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;
これをすべて 1 つの文字列として扱っています。
代わりにステートメント全体を文字列として実行する必要があります...(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)