2

3番目のクエリだけが機能する理由を教えてもらえますか? NULLifとget の扱いが異なることは理解できempty column/stringますが、なぜ 2 番目のクエリが機能しないのですか? is_disabledandis_terminatedへの変換VARCHAR(3)も同様に役に立ちません。

ありがとう

テーブル:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `fullname` varbinary(100) NOT NULL,
  `is_disabled` enum('Yes') DEFAULT NULL,
  `is_terminated` enum('Yes') DEFAULT NULL
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

データ:

id - fullname - is_disabled              - is_terminated
1  - User One - {this is just empty column} - NULL

クエリ 1:

SELECT id, fullname FROM users
WHERE id = '1'
    AND
    is_disabled != 'Yes' /* is_disabled <> 'Yes' */
    AND
    is_terminated != 'Yes' /* is_terminated <> 'Yes' */

クエリ 2:

SELECT id, fullname FROM users
WHERE id = '1'
    AND
    is_disabled = '' /* is_disabled IS NULL */
    AND
    is_terminated = '' /* is_terminated IS NULL */

クエリ 3:

SELECT id, fullname FROM users
WHERE id = '1'
    AND
    (is_disabled = '' OR is_disabled IS NULL)
    AND
    (is_terminated = '' OR is_terminated IS NULL)
4

2 に答える 2

2

MySQL では、NULLとは異なりますEmpty String。は と等しくcolumn = ''ありませんcolumn IS NULL

条件により、3 番目のクエリは期待どおりに機能しますOR。それを説明しましょう。

d = '1' AND (is_disabled = '' OR is_disabled IS NULL) AND (is_terminated = '' OR is_terminated IS NULL)
 TRUE   AND (          TRUE   OR           FALSE)     AND (FALSE OR TRUE)
 TRUE   AND                  TRUE                     AND      TRUE
 .... making the condition ALL TRUE

2 番目のクエリは、条件全体の作成にis_terminated = ''戻るこの条件のために失敗します。NULLWHERENULL

于 2013-10-29T12:09:38.870 に答える