警告: 整合性のない脚注開始用の簡単コード:
この警告が見当違いであれば、管理画面の 全般設定 > 脚注の開始・終了用の簡単コード > 簡単コードの整合性を検査 にある構文検査の機能を無効にしてください。
整合性のない脚注開始用の簡単コード:
“1)と(2)はパターン3では同じ結果であるがパターン4は結果が異なる)。 次の様に考えると理解し易い。 ANDやORを含む句にNOTを付けると、それぞれの比較演算子は逆の意味を持つ演算子になり、ANDはORに、ORはANDに変化するâ¦â
ãã®è¨äºã¯ã¢ããªããã®æè¡ããã°ãDoRubyããã移è¡ããè¨äºã§ããæ å ±ãå¤ãå¯è½æ§ãããã¾ãã®ã§ã注æãã ããã
ããã°ã©ã ã³ã¼ããæ¸ãéãæ¸ãè¨èªã®ææ³ãç解ãã¦ããäºã¯éè¦ã§ãããã
ç解ãã¦ããæ§ã§å®ã¯æå¤ã¨èª¤è§£ãã¦ããã¨ã³ã¸ãã¢ã(æ¯è¼ç)å¤ãããªãSQLã®WHEREæ¡ä»¶ã«ã¤ãã¦ãæåã¨æ³¨æç¹ãè¨è¿°ããã
â åæ
次ã®æ§ãªãã¼ã¿ãæã¤ãã¼ãã«ãtããããã¨ããã
+----+------+------+
| id | a | b |
+----+------+------+
| 1 | NULL | NULL |
| 2 | NULL | 2222 |
| 3 | 1111 | 2222 |
| 4 | 1111 | 1111 |
+----+------+------+
ãã®ãã¼ãã«ã«å¯¾ãã¦ãWHEREå¥ã§æ¡ä»¶ãæå®ãã¦æ½åºããSELECTæãèããã
SELECT id FROM t WHERE /* ããã«æ¡ä»¶ãè¨è¼ */;
ãã®WHEREå¥ã以ä¸ã®ãã¿ã¼ã³1-4ã«è¨è¿°ããæ§ãªå 容ã§ãã£ãå ´åãã©ã®idãæ½åºããããæ£ç¢ºã«æ³åã§ããã§ããããã
ä½è«
Oracle, MySQL çãDUALã使ç¨å¯è½ãªãã¼ã¿ãã¼ã¹ã§ã¯ã次ã®æ§ã«è¨è¿°ããã°ç°¡åã«ç¢ºèªãã§ããã
SELECT * FROM (
SELECT 1 id, NULL a, NULL b FROM DUAL UNION
SELECT 2 id, NULL a, 2222 b FROM DUAL UNION
SELECT 3 id, 1111 a, 2222 b FROM DUAL UNION
SELECT 4 id, 1111 a, 1111 b FROM DUAL
) t
WHERE /* ããã«æ¡ä»¶ãè¨è¼ */;
â ãã¿ã¼ã³1 (é常æ¯è¼)
åé¡
(1) a = b
(2) a <> b
(3) a < b
(4) a > b
(5) a IS NULL
(6) a IS NOT NULL
çµæ
(1) 4
(2) 3
(3) 3
(4) ãªã
(5) 1, 2
(6) 3, 4
çµæããè¨ãã注æç¹
=, >, <>, <= ãæå®ããå ´åãNULLãã¼ã¿ã¯ãããããªããªãã
â ãã¿ã¼ã³2 (ãã¿ã¼ã³1ã«NOTä»å )
åé¡
(1) NOT a = b
(2) NOT a <> b
(3) NOT a < b
(4) NOT a > b
(5) NOT a IS NULL
(6) NOT a IS NOT NULL
çµæ
(1) 3
(2) 4
(3) 4
(4) 3, 4
(5) 3, 4
(6) 1, 2
çµæããè¨ãã注æç¹
NOTãä»ããã¨ä»ããªãã£ãå ´åã«æ½åºãããªãã£ãã¬ã³ã¼ããæ½åºãããã¨èããã¡ã§ããããå®éã«ã¯ããã§ã¯ãªãã
ä¸èº«ã®æ¯è¼æ¼ç®å(IS NULLçãå«ããã¨ãã)ãéã®æå³ãæã¤æ¯è¼æ¼ç®åã«å¤åããã¨èããã¨ç解ãæãã
= ã®é㯠<>
> ã®é㯠<=
< ã®é㯠>=
IS NULL ã®é㯠IS NOT NULL
â»å³ã¡ä»¥ä¸ã¨åãã«ãªãã
(1) a <> b
(2) a = b
(3) a >= b
(4) a <= b
(5) a IS NOT NULL
(6) a IS NULL
â ãã¿ã¼ã³3 (è¤æ°æ¡ä»¶)
åé¡
(1) a = b AND a IS NOT NULL
(2) a = b AND b IS NOT NULL
(3) a = b OR b IS NULL
(4) a < 1111 AND b < 2222 OR a < b
çµæ
(1) 4
(2) 4
(3) 1, 4
(4) 3
çµæãã解ãç¹
ãã¿ã¼ã³1ã§è¿°ã¹ãæ§ã«ã=ãç¨ããã¨NULLãã¼ã¿ã¯ãããããªããªã(ãã¨ãã¨IS NOT NULL ãå«æãã¦ãã)ã®ã§ããAND a IS NOT NULLãçãä»ã足ãã¦ãçµæã«å·®ã¯åºãªãã
â ãã¿ã¼ã³4 (ãã¿ã¼ã³3ã«NOTä»å )
åé¡
(1) NOT (a = b AND a IS NOT NULL)
(2) NOT (a = b AND b IS NOT NULL)
(3) NOT (a = b OR b IS NULL)
(4) NOT (a < 1111 AND b < 2222 OR a < b)
çµæ
(1) 1, 2, 3
(2) 1, 3
(3) 3
(4) 4
çµæããè¨ãã注æç¹
ãã®çµæããã解ãæ§ã«ãNOTãä»ããªãã£ãå ´åã«æ½åºãããªãã£ãã¬ã³ã¼ããNOTãä»ããã¨æ½åºããã訳ã§ã¯ãªã((1)ã¨(2)ã¯ãã¿ã¼ã³3ã§ã¯åãçµæã§ããããã¿ã¼ã³4ã¯çµæãç°ãªã)ã
次ã®æ§ã«èããã¨ç解ãæãã
ANDãORãå«ãå¥ã«NOTãä»ããã¨ãããããã®æ¯è¼æ¼ç®åã¯éã®æå³ãæã¤æ¼ç®åã«ãªããANDã¯ORã«ãORã¯ANDã«å¤åãããã¾ããANDã¨ORãè¤åãã¦ããå ´åã¯ããã¨ãã¨ANDã§ãã£ãæ¡ä»¶å士ã®æ¹ãçµå度ãå¼·ããªãã
â»å³ã¡ä»¥ä¸ã¨åãã«ãªãã
(1) a <> b OR a IS NULL
(2) a <> b OR b IS NULL
(3) a <> b AND b IS NOT NULL
(4) (a >= 1111 OR b >= 2222) AND a >= b
â çµè«
NULLå¤ãå«ã¾ãããã¼ã¿ã«å¯¾ããWHEREæ¡ä»¶ã¯ãæ°å¦çãªå¼ã®çµæã¨ç°ãªãã®ã§ã誤解ããæããç¹ã«ãNOTãå«ã¾ããæ¡ä»¶ã¯ã解éã®éã«1æéå¢ããã¨ããã ãã§ãªãã誤解ãã確çãä¸ããäºã«ãªãã®ã§ãããåãæ¡ä»¶ã§NOTã使ããªãè¨è¿°ãå¯è½ãªå ´åã¯ãçç±ããªããã°ä½¿ããªãæ¹ãè¯ãã¨è¨ããã§ãããã