Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当3列具有空值时,使用查询隐藏表中的行_Sql_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

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

Sql 当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

我正在寻找最好的方法来构建一个查询,在三个字段值(在三个不同的列中)为空时隐藏记录(行)。下面的代码给出了一条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
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,否则记录将无法识别?