ms access 2007 SQL“不喜欢”忽略空白单元格

Posted

技术标签:

【中文标题】ms access 2007 SQL“不喜欢”忽略空白单元格【英文标题】:ms access 2007 SQL "not like" is ignoring blank cells 【发布时间】:2011-02-17 15:46:05 【问题描述】:

我对尝试运行的一些 SQL 感到困惑。这是一个示例数据集

Username ID        Text1
red55   1235342     fdfdf
black   5542121     sdsd
red32   5542145     sffrds
green   5542911         
bluee   5333121     ffds

所以 SQL 应该是

SELECT username, ID, Text1 
  FROM user_info
 WHERE username NOT LIKE 'red*' 
       AND text1 NOT LIKE 'sd*';

所以我希望看到一个结果集

Username ID        Text1
green   5542911         
bluee   5333121     ffds

但它不起作用。它似乎忽略了空白值。我只会看到一个记录(不像上面的两个)。我需要我的 SQL 来简单地告诉我不以“red”开头的记录以及不以“sd”开头的任何记录。然而,它要么去掉所有的 AND 空格,要么如果我使用 OR 语句,则去掉一个。

有什么想法吗?我被困在这里!

【问题讨论】:

【参考方案1】:

您需要显式处理空值。一种选择是:

SELECT username, ID, Text1 
FROM user_info 
WHERE (username Is Null OR username NOT LIKE 'red*')
  AND (text1 Is Null OR text1 NOT LIKE 'sd*')

【讨论】:

另一种选择是“设计”可空列。 @onedaywhen:我喜欢这个建议,但是有几种方法可以做到。任何关于它的cmets,或指向其他地方讨论它的指针。我对选项的想法是:1. 更改数据类型,2. 定义默认值或 3. 将列转换为另一个表中的行。一个有趣的话题,对我来说几乎所有与架构设计有关的话题。 @David-W-Fenton:Hugh Darwen (dcs.warwick.ac.uk/~hugh/TTM/Missing-info-without-nulls.pdf) 的“如何在不使用 NULL 的情况下处理丢失的信息”,尽管您已经阅读过 IIRC 并讨厌它 ;) 啊,是的——那个文章。我讨厌它。它有很多完全的精神错乱。 Null 没有任何问题,但有充分的理由根据具体情况从系统中设计它们。但我绝对不会制定这样做的原则。

以上是关于ms access 2007 SQL“不喜欢”忽略空白单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 2007 中对 ODBC 表导入 sql 查询

如何在 MS Access 2007 中获取 sql 查询

MS Access 2007 中的 SQL 内部连接

如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行

按计数排序未正确排序 - SQL (MS Access 2007)

MS Access 2007 中的 SQL JOIN 问题