选择Query in SQL +列中的所有值

时间:2020-03-06 14:46:16  来源:igfitidea点击:

我有一个表Table1,其中的列ID1,ID2,ID3的所有列都可以为空

我可以为行中的所有列输入null或者value。

我的问题是我需要选择所有列值都不应该为null的行。

谢谢

表格中总共约有300列。我不能为所有where条件中的列提供is is null属性。

解决方案

使用"函数"测试空值的答案是正确的。语法取决于数据库。如果数据库中不存在ISNULL(),请尝试:

SELECT * FROM Table1,其中id1不为空且id2不为空且id3不为空

即使表中有300个字段,也无法缩短这一时间。

我们是说要选择所有列都不为空的行吗?

`

SELECT id1, id2, id3 
FROM Table1 
WHERE id1 IS NOT NULL AND id2 IS NOT NULL AND id3 IS NOT NULL

`

最好的选择是重新考虑表的设计,并在需要时将其拆分。

否则,最好的选择是它以编程方式获取表元数据,遍历各列,然后从那里创建SQL。大多数编码语言都可以访问表元数据,否则需要第二个SQL。

但是,最好的选择是考虑如何更好地设计桌子。

我们可以尝试CLR存储过程(如果我们使用的是SQL Server),也可以使用Cor将此逻辑移至应用程序的另一层,无论使用哪种语言。

另一个选择是动态创建查询,连接WHERE子句并执行动态生成的查询。

不明白为什么这个问题得到否定的评论这个问题可以扩展到从社区中的非程序员那里继承了一张大桌子的人(我从以前的经验中知道),并且如果桌子是未知的,则同样如此。要降级,因为其" 300"列是毫无意义的IMO。

我们是在读取数据,还是要尝试更新有问题的行?

我只是想知道是否可以通过创建六个视图(每个视图基于50列不是NULL的内容),然后将它们与某种EXISTS或者UNION语句链接来进行操作?

我们能告诉我们更多有关我们要如何使用结果集的信息吗?

我们需要这样做:

SELECT *
FROM yourtable
WHERE
    column1 IS NOT NULL
AND column2 IS NOT NULL
AND column3 IS NOT NULL
AND ....

对不起,我在这里可能有点厚。我们是否要找回其中一列(而不是id列)中包含某些内容的行?

你不能吗?

create vw_View_Fields1to5 as 
  select id from employees 
  where name is not null or description is not null or field3 is not null 
  or field4 is not null or field5 is not null;
create vw_View_Fields6to10 as 
  select id from employees 
  where field6 is not null or field7 is not null or field8 is not null 
  or field 9 is not null or field10 is not null;
(etc)

select id from vw_View_Fields1to5
union 
select id from vw_View_Fields6to10 .... (etc)

当然,我们必须采取DISTINCT或者其他方法来减少掉入多个视图的行。

如果我们希望返回的行在id以外的任何列中都没有,则可以将" or blah is not null"切换为" and blah is null"(等等)。

那有意义吗...还是我错过了什么? :-)

编辑:实际上,我相信UNION进程无论如何只会带回不同的行(与UNION ALL相对),但是我可能是错的,我还没有实际尝试过....

这是第一次,无论是Georgi还是engram或者robsoft。但是,对于后续内容,如果可能的话,我们可以更改表并添加一个称为CSELECTFLAG的列,并首先将所有具有值的列更新为Y,将其他值更新为N。每次插入时都需要更新。这将有助于使后续查询更快,更轻松。