Sql 当3列具有空值时,使用查询隐藏表中的行
我正在寻找最好的方法来构建一个查询,在三个字段值(在三个不同的列中)为空时隐藏记录(行)。下面的代码给出了一条3075语法运行时错误消息。另外,我不确定这是否会导致问题,但下面的代码是从主窗体执行的,并且会影响子窗体frmStaticDataSkills02Sql 当3列具有空值时,使用查询隐藏表中的行,sql,ms-access,vba,ms-access-2010,Sql,Ms Access,Vba,Ms Access 2010,我正在寻找最好的方法来构建一个查询,在三个字段值(在三个不同的列中)为空时隐藏记录(行)。下面的代码给出了一条3075语法运行时错误消息。另外,我不确定这是否会导致问题,但下面的代码是从主窗体执行的,并且会影响子窗体frmStaticDataSkills02 sql_get = "SELECT [tblCompetency02].[HighLevelObjective], [tblCompetency04].[Self], [tblCompetency04].[SelfSpecialLangua
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
sql\u get=“选择[TBLCompency02]。[HighLevelObjective],[TBLCompency04]。[SelfSpecialLanguage],[TBLCompency04]。[SelfChecklist],[TBLCompency04]。[TeamSpecialLanguage],[TBLCompency04]。[TeamSpecialLanguage],[TeamChecklist],[TBLCompency04]。[组织],[TBLCompency04]。[organizationspeciallanguage],[tblCompetency04]。[OrganizationChecklist],[tblCompetency02]。[tblCompetency04]内部加入[tblCompetency02]的[tblCompetency04]。[HighLevelObjective]=[tblCompetency02]。[ID]其中([tblCompetency04]。[self]“或[tblCompetency04]。[team]”或[tblCompetency04]。[Organization])”
Form\u frmstaticataskills02.Form.RecordSource=sql\u get
以以下内容结束查询:
WHERE [column_1] IS NOT NULL AND [column_2] IS NOT NULL AND [column_3] IS NOT NULL
以以下内容结束您的查询:
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
如果不希望返回任何一列具有空值的行,则可以使用或。例如:
SELECT *
FROM tablename
WHERE
field1 IS NOT NULL OR
field2 IS NOT NULL OR
field3 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
如果不希望返回任何一列具有空值的行,则可以使用或。例如:
SELECT *
FROM tablename
WHERE
field1 IS NOT NULL OR
field2 IS NOT NULL OR
field3 IS NOT NULL
如果不是所有三列都为空,则返回数据:
where not (col1 is null and col2 is null and col3 is null)
应用逻辑代数后也是如此:如果三行中的任何一行不为空,则返回该行
where col1 is not null or col2 is not null or col3 is not null)
如果不是所有三列都为空,则返回数据:
where not (col1 is null and col2 is null and col3 is null)
应用逻辑代数后也是如此:如果三行中的任何一行不为空,则返回该行
where col1 is not null or col2 is not null or col3 is not null)
在一般意义上,在由N列组成的表中,可以显式计算表中空列的数量,然后将它们相加,并将空列的数量与where谓词中的3
进行比较:
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;
选择*
来自MyTable x
哪里
((IIF(x.COL1为空,1,0)+
IIF(x.COL2为空,1,0)+
IIF(x.COL3为空,1,0)+
IIF(x.COL4为空,1,0)))3;
(显然,为表中的所有N列添加IIF
语句一般来说,在一个包含N列的表中,您可以显式计算表中空列的数量,然后将它们相加,并将空列的计数与where谓词中的3
进行比较:
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;
选择*
来自MyTable x
哪里
((IIF(x.COL1为空,1,0)+
IIF(x.COL2为空,1,0)+
IIF(x.COL3为空,1,0)+
IIF(x.COL4为空,1,0)))3;
(显然,继续为表的所有N列添加IIF
语句select…where not(col1为null,col2为null,col3为null)
谢谢。我认为我们的思路是正确的。请检查我编辑的代码,它当前给我一条运行时424错误消息。(需要对象)语法看起来正常,此错误可能与Access中的某些细节有关…我应该强调我正在尝试从主窗体更新子窗体。请您再次查看我的代码好吗?我认为我现在的问题在于引用,而不是查询的语法。我帮不上忙,我对Access中的窗体没有任何线索:-)select…where not(col1为null,col2为null,col3为null)
谢谢。我认为我们的思路是正确的。请检查我编辑的代码,它当前给我一条运行时424错误消息。(需要对象)语法看起来正常,此错误可能与Access中的某些细节有关…我应该强调我正在尝试从主窗体更新子窗体。请您再次查看我的代码好吗?我认为我现在的问题在于引用,而不是查询的语法。我帮不上忙,我对Access中的窗体没有任何线索:-)我不这么认为。如果其中一列为空,会发生什么情况??使用您的查询,似乎所有的列都需要被弹出,否则记录将无法识别?我不这么认为。如果其中一列为空,会发生什么情况??使用您的查询,似乎需要对所有列进行poplulated,否则记录将无法识别?