0

私はこの簡単なクエリを持っています -:

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

しかし、これは機能せず、 と の行も表示されshare_src = song1ますshare_src = song2

私のクエリの問題は何ですか。手伝ってくれてありがとう..

4

4 に答える 4

1

IN1 つの文字列では機能しません。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'")
于 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

これをすべて 1 つの文字列として扱っています。

代わりにステートメント全体を文字列として実行する必要があります...(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 に答える