我正在寻找构建查询的最佳方法,如果三个字段值(在三个不同的列中)为null,则会隐藏记录(行)。下面的代码给我一个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
答案 0 :(得分:2)
在一般意义上,在N列的表中,您可以显式计算表中NULL列的数量,然后将它们相加并将空位数与3
中的where谓词进行比较:< / p>
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;
(显然,继续为表的所有N列添加IIF
语句
答案 1 :(得分:1)
使用以下命令结束查询:
WHERE [column_1] IS NOT NULL AND [column_2] IS NOT NULL AND [column_3] IS NOT NULL
答案 2 :(得分:1)
您可以在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
答案 3 :(得分:1)
如果不是所有三列都是NULL,这将返回数据:
app.controller("ShowOrderController", ["orderId", function (orderId, $scope) {
$scope.orderId = orderId;
}]);
在应用逻辑代数后也是如此:如果三行中的任何一行是NOT NULL,则返回行
where not (col1 is null and col2 is null and col3 is null)