объясните эти избранные высказывания! - PullRequest
1 голос
/ 30 апреля 2010

Не могу понять разницу между этими утверждениями? не могли бы вы мне помочь, я прочитал несколько примеров утверждений, но я их не получил.

SELECT 'B' FROM T WHERE A = (SELECT NULL);
SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);    
SELECT 'D' FROM T WHERE A = A;

Я использую MySQL

РЕДАКТИРОВАНИЕ: также имеет условную часть: SET ANSI_NULLS ВЫКЛ.

1 Ответ

3 голосов
/ 30 апреля 2010

ANSI_NULL ON

SELECT 'B' FROM T WHERE A = (SELECT NULL);

совпадает с:

SELECT 'B' FROM T WHERE A = NULL;

Который всегда возвращает пустой набор, потому что все, что сравнивается с NULL, возвращает NULL, а не TRUE. Вы можете попробовать это:

SELECT 'B' FROM T WHERE A IS NULL;

Второй запрос в основном такой же и возвращает пустой набор:

SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);

Если A имеет значение, следующее вернет все строки:

SELECT 'D' FROM T WHERE A = A;

Кроме того, если A НЕДЕЙСТВИТЕЛЬНО, он вернет пустой набор.

ANSI_NULL OFF

SELECT 'B' FROM T WHERE A = (SELECT NULL);

совпадает с:

SELECT 'B' FROM T WHERE A = NULL;

Возвращает все строки, где A НЕДЕЙСТВИТЕЛЕН.

Второй запрос в основном такой же и возвращает строки, в которых A IS NULL:

SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);

Следующее всегда будет возвращать все строки, независимо от того, равен ли A NULL:

SELECT 'D' FROM T WHERE A = A;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...