step by stepで見ていきましょう
sql
1EXISTS (
2 SELECT content FROM Category WHERE content = 'TEST'
3)
サブクエリ内のselect文の結果が1件以上、つまりCategory表にconetent列の値が'TEST'のものが存在する場合にTRUEとなります。
sql
1NOT EXISTS (
2 SELECT content FROM Category WHERE content = 'TEST'
3)
先ほどの否定形であるため、Category表にconetent列の値が'TEST'のものが存在しない場合にTRUEとなります。
sql
1SELECT * FROM (SELECT 1, 'TEST') AS tmp
2WHERE NOT EXISTS (
3 SELECT content FROM Category WHERE content = 'TEST'
4) LIMIT 1
Category表にconetent列の値が'TEST'のものが存在しない場合、サブクエリ (SELECT 1, 'TEST') の結果、つまり1, 'TEST'が結果として返ります。
SELECT文では表の列名だけでなく、定数を指定することもできます。LIMIT 1は (SELECT 1, 'TEST') の結果が常に1レコードのみであるため、今回のケースでは無視してよいです。
sql
1INSERT INTO `Category`
2SELECT * FROM (SELECT 1, 'TEST') AS tmp
3WHERE NOT EXISTS (
4 SELECT content FROM Category WHERE content = 'TEST'
5) LIMIT 1;
Category表にconetent列の値が'TEST'のものが存在しない場合、1, 'TEST'がCategory表にINSERTされます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/06 10:01
2017/08/06 10:23