sql - 两个AND的地方

sql - 两个AND的地方,第1张

我试图从数据库中删除没有电话,电话号码和电子邮件的行(所有3个一起)

DELETE * 
FROM TEST
WHERE (((TEST.EMAIL1) IS Null)
AND ((TEST.PHONE3) IS Null)
AND ((TEST.PHONE1) IS Null));

出于某种原因,如果我只做任何两个(email1,phone1或phone3)它可以工作,但是当我添加第二个' AND'它停止工作。有任何建议请。

最佳答案:

5 个答案:

答案 0 :(得分:1)

对于所有AND,括号不是必需的

DELETE
FROM TEST
WHERE TEST.EMAIL1 IS Null
AND TEST.PHONE3 IS Null
AND TEST.PHONE1 IS Null;

但是,请确保您希望删除的值实际上包含NULL,而不是空字符串或文字值null。

您可以通过将语句更改为select语句来检查将删除哪些信息:

SELECT * 
FROM TEST
WHERE TEST.EMAIL1 IS Null
AND TEST.PHONE3 IS Null
AND TEST.PHONE1 IS Null;

根据您自己对问题的回答,您遇到了空字符串,而不是空字符串。写下你写的东西和避免OR的另一种方法是:

SELECT * 
FROM TEST
WHERE isnull(TEST.EMAIL1, '') <> ''
AND isnull(TEST.PHONE3, '') <> ''
AND isnull(TEST.PHONE1, '') <> '';

在上面我们要说明我们遇到的任何null test.email1s,将其视为空字符串,然后检查该值是否为空字符串。

基本上 - 如果这三个字段中的任何一个为空或空字符串。与你的答案相同,只是另一种写作方式。

答案 1 :(得分:1)

老实说WHERE子句在这个例子中看起来没问题,但是&#39; *&#39;应该被排除在外:

DELETE FROM TEST
    WHERE (((TEST.EMAIL1) IS Null)
        AND ((TEST.PHONE3) IS Null)
        AND ((TEST.PHONE1) IS Null));

如果您在删除星号后遇到问题,请将其重新复制粘贴回来,然后我们就可以看到括号中是否存在问题。但上面的包围看起来还不错(即使没有必要)。

答案 2 :(得分:1)

我不确定您的案件发生了什么,但我已经清理了一下您的陈述,因为据我所知,您不应该需要所有这些()并且DELETE不需要*,因为它应该删除符合您条件的任何内容。尝试一下,让我知道!

DELETE
FROM TEST
WHERE EMAIL1 IS Null
AND PHONE3 IS Null
AND PHONE1 IS Null

答案 3 :(得分:1)

DELETE *
FROM test
WHERE (((test.EMAIL1) ="") OR ((test.EMAIL1) IS NULL))
AND (((test.PHONE1) = "") OR ((test.phone1) IS NULL))
AND (((test.PHONE3) ="") OR ((test.phone3) IS NULL));

为我工作。感谢所有..

答案 4 :(得分:0)

您可能没有所有三个都为空的行。检查您的数据。

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复