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爲NULL,它將返回一個空集。
ANSI_NULL OFF
SELECT 'B' FROM T WHERE A = (SELECT NULL);
是一樣的:
SELECT 'B' FROM T WHERE A = NULL;
它返回其中A爲NULL的所有行。
第二個查詢是基本相同的,其中A爲NULL將返回行:
SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);
下面將始終返回所有行,如果不考慮A爲NULL:
SELECT 'D' FROM T WHERE A = A;
exceuse我,我已經提出了一個問題,如 SELECT'A'FROM T WHERE A = NULL; 和其他人告訴我,它會返回一些包含A字符的行! – user329820 2010-04-30 16:40:13
http://stackoverflow.com/questions/2745849/mysql-column-names-and-aliases – user329820 2010-04-30 16:41:05
@ user329820上述帖子是正確的。要與NULL進行比較,您必須使用IS。自己試試吧! – Blorgbeard 2010-04-30 16:54:04