当 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
语句
我正在寻找构建查询的最佳方法,该查询将在三个字段值(在三个不同的列中)为空的情况下隐藏记录(行)。下面的代码给我一个语法 运行 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
语句