当 3 列具有空值时,使用查询隐藏 table 中的一行

Hiding a row in a table with a query when 3 columns have null values

我正在寻找构建查询的最佳方法,该查询将在三个字段值(在三个不同的列中)为空的情况下隐藏记录(行)。下面的代码给我一个语法 运行 3075 的时间错误消息。另外,我不确定它是否导致了问题,但下面的代码是从主窗体执行并影响子窗体 frmStaticDataSkills02.

sql_get = "SELECT [tblCompetency02].[HighLevelObjective], [tblCompetency04].[Self], [tblCompetency04].[SelfSpecialLanguage], [tblCompetency04].[SelfChecklist], [tblCompetency04].[Team], [tblCompetency04].[TeamSpecialLanguage], [tblCompetency04].[TeamChecklist], [tblCompetency04].[Organisation], [tblCompetency04].[OrganisationSpecialLanguage], [tblCompetency04].[OrganisationChecklist], [tblCompetency02].[Competency] FROM [tblCompetency04] INNER JOIN [tblCompetency02] ON [tblCompetency04].[HighLevelObjective] = [tblCompetency02].[ID] WHERE ([tblcompetency04].[self]<>"" or [tblcompetency04].[team]<>"" or [tblcompetency04].[organisation]<>"")"
Form_frmStaticDataSkills02.Form.RecordSource = sql_get

以以下方式结束您的查询:

WHERE [column_1] IS NOT NULL AND [column_2] IS NOT NULL AND [column_3] IS NOT NULL

您可以在 where 子句中通过指定所有 3 个字段都不应为 NULL 来做到这一点,返回的结果集将不会包含所有 3 个字段都为 NULL 的记录。

SELECT * 
FROM tablename
WHERE
field1 IS NOT NULL AND
field2 IS NOT NULL AND
field3 IS NOT NULL

如果您不希望返回其中任何一列具有空值的行,您可以使用 OR。例如:

SELECT * 
FROM tablename
WHERE
field1 IS NOT NULL OR
field2 IS NOT NULL OR
field3 IS NOT NULL

如果不是所有三列都为 NULL,这将 return 数据:

where not (col1 is null and col2 is null and col3 is null)

这在应用逻辑代数后是相同的:return 如果三行中的任何一行不为空,则该行

where col1 is not null or col2 is not null or col3 is not null)

在一般意义上,在 N 列的 table 中,您可以显式计算 table 中 NULL 列的数量,然后将它们相加并将空值的数量与 3 在 where 谓词中:

SELECT *
FROM MyTable x
WHERE 
     ((IIF(x.COL1 IS NULL, 1 , 0) + 
       IIF(x.COL2 IS  NULL, 1 , 0) + 
       IIF(x.COL3 IS  NULL, 1 , 0) + 
       IIF(x.COL4 IS  NULL, 1 , 0))) <> 3;

(显然,继续为 table

的所有 N 列添加 IIF 语句