我无法区分这些陈述吗?你能不能帮助我,我已经阅读了一些精选陈述的样本,但我没有得到这些陈述。
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为OFF
答案 0 :(得分:3)
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 IS为NULL,它将返回一个空集。
ANSI_NULL OFF
SELECT 'B' FROM T WHERE A = (SELECT NULL);
与:
相同SELECT 'B' FROM T WHERE A = NULL;
返回A IS为NULL的所有行。
第二个查询基本相同,并返回A IS为NULL的行:
SELECT 'C' FROM T WHERE A = ANY (SELECT NULL);
以下将始终返回所有行,无论A IS是否为空:
SELECT 'D' FROM T WHERE A = A;