我有一个表Table1,列id1,id2,id3所有列都可以为空
我可以为行中的所有列输入null或value。
我的问题是我需要选择所有列值不应为空的行。
由于
表中共有大约300列。我无法对is null
条件中的所有列执行where
属性。
答案 0 :(得分:3)
使用“函数”测试空值的答案是正确的。语法取决于数据库。如果数据库中不存在ISNULL(),请尝试:
SELECT * FROM Table1 WHERE id1 IS NOT NULL且id2 IS NOT NULL且id3 IS NOT NULL
即使您的桌子中有300个字段,也无法将其缩短。
答案 1 :(得分:3)
不明白为什么这个问题会得到负面的评论 - 这个问题可以扩展到从社区中的非程序员那里继承大表的人(我从以前的经验中知道),同样如果表是未知的。降级这是因为它的'300'列是毫无意义的IMO。
答案 2 :(得分:2)
最好的办法是重新考虑表格的设计,如果需要,可以将它们分开。
否则最好的选择是以进度方式执行 - 抓取表元数据,遍历列并从那里创建SQL。大多数编码语言都可以访问表元数据,因为它不需要第二个SQL。
但是,最好的办法是考虑如何更好地设计表格。
答案 3 :(得分:2)
你需要这样做:
SELECT *
FROM yourtable
WHERE
column1 IS NOT NULL
AND column2 IS NOT NULL
AND column3 IS NOT NULL
AND ....
答案 4 :(得分:1)
您是说要选择没有列为空的行?
SELECT id1, id2, id3
FROM Table1
WHERE id1 IS NOT NULL AND id2 IS NOT NULL AND id3 IS NOT NULL
答案 5 :(得分:1)
对不起 - 我这里可能有点厚。你试图找回其中一列(除了id列)中有SOMETHING的行?
你不能这样做;
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之外的任何列中返回没有任何列的行,你可以将'或blah不为空'切换为'并且blah为null '(等)。
这是否有意义......或者我错过了什么? : - )
编辑:实际上,我认为UNION进程只会带回不同的行(而不是UNION ALL),但我可能错了 - 我实际上没有尝试过这个....(还是!)答案 6 :(得分:0)
您可以尝试CLR存储过程(如果您正在使用SQL Server)或使用C#或您正在使用的任何语言将此逻辑移动到应用程序的其他层。
另一种选择是动态创建查询,连接WHERE子句并执行动态生成的查询。
答案 7 :(得分:0)
您是刚刚阅读数据,还是想尝试更新相关行?
我只是想知道是否有一些东西可以通过制作六个视图,每个视图基于50个列是NOT NULL,然后将它们与某种EXISTS或UNION语句链接?
您能告诉我们您想对结果集做些什么吗?
答案 8 :(得分:0)
无论是Georgi还是engram或robsoft,这是第一次。但是对于后续的东西,如果可能的话,您可以更改表并添加一个名为CSELECTFLAG的列,并且最初将此更新为Y,以用于具有值的N和其他值的N.每次有插入时都需要更新。这有助于您更快,更轻松地进行后续查询。