标签: null

在关系数据库中为可能的空值创建另一个表是否更好?

我正在设计一个在MySQL中使用的关系数据库。我有下一种情况:在一个表中,有些字段在大多数情况下都是NULL. 这些字段将类似于:

Table name: tabla

Fields:
  idtabla not null,
  text (varchar(n)) not null,
  image (mediumblob) {this can be null}
Run Code Online (Sandbox Code Playgroud)

疑问:是否最好创建另一个表,当需要使用图像时,查询新表?为什么您的解决方案更适合设计?MySQL的时间响应、查询的便捷性等?

mysql performance null database-design relational-theory query-performance

5
推荐指数
1
解决办法
3098
查看次数

使用 Postgres 继承缺失值的长序列

我有一张这样的表:

create table foo (foo_label text, foo_price int, foo_date date);

insert into foo (
          values
          ('aaa', 100,  '2017-01-01'),
          ('aaa', NULL, '2017-02-01'),
          ('aaa', NULL, '2017-03-01'),
          ('aaa', NULL, '2017-04-01'),
          ('aaa', 140,  '2017-05-01'),
          ('aaa', NULL, '2017-06-01'),
          ('aaa', 180,  '2017-07-01')
        );
Run Code Online (Sandbox Code Playgroud)

如您所见,foo_price列上的一些值丢失了。

我需要的是缺失值以这种方式用“前一个”可用值填充:

 foo_label | fixed_foo_price | foo_date
-----------+-----------------+------------
 aaa       | 100             | 2017-01-01
 aaa       | 100             | 2017-02-01
 aaa       | 100             | 2017-03-01
 aaa       | 100             | 2017-04-01
 aaa       | 140             | 2017-05-01
 aaa       | 140             | 2017-06-01
 aaa       | 180 …
Run Code Online (Sandbox Code Playgroud)

postgresql null count window-functions gaps-and-islands

5
推荐指数
1
解决办法
2225
查看次数

如何选择不为空的数组?

为什么这如此棘手,令牌设置为什么,它不等于 null 也不等于空字符串?

SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword';

 lexemes 
---------
 {}
 {}
 {}
 {titl}
(4 rows)
Run Code Online (Sandbox Code Playgroud)

好吧..所以我想摆脱{}

SELECT lexemes
FROM ts_debug('This is a title')
WHERE alias = 'asciiword'
  AND lexemes <> '{}'
  AND lexemes <> ARRAY[]::text[]
  AND lexemes IS NOT NULL
  AND lexemes <> ARRAY[' ']
  AND lexemes <> ARRAY[null]::text[];
Run Code Online (Sandbox Code Playgroud)

我知道其中大多数都行不通。,但我完全困惑为什么<> '{}'不起作用<> ARRAY[]::text;。我该如何过滤掉这个?

postgresql null condition array postgresql-9.5

5
推荐指数
1
解决办法
2万
查看次数

如何捕获 SQL Server 表中缺失的信息

我在SQL Server数据库中有几个带有可为空列的表。这些可为空的属性要么在行创建时未提供,要么在某些情况下不适用。

我意识到NULL在某些情况下我不能使用相同的值来表示“未提供”,而在其他情况下则表示“不适用”。这些可选列的类型的intdatetimestring。即使我标记string为强制性(列NOT NULL),要么设置的属性为“未提供”和“不适用”合适,怎么做intdatetime列?我从书中阅读了第 23 章:

数据库探索:CJ Data 和 Hugh Darwen 关于第三宣言的论文

看起来状态列只有数值,但由于作者设置了 'n/a' 和 'd/k'(不知道),不确定他们是否将状态创建为字符串列。将所有可选列创建为字符串列并在属性没有值时捕获属性中的原因是否是个好主意?

null sql-server

5
推荐指数
1
解决办法
186
查看次数

用提供的列表中的一个字符串替换 NULL 值

我试图通过使用 SELECT 和我提供给编译器的集合中的一个(随机?)字符串来替换表中的 NULL 值。

例子:

|id | date |
+---+------+    
| 1 | 2017 |
| 2 | NULL |
| 3 | NULL |
Run Code Online (Sandbox Code Playgroud)

我希望NULL值是“2015”、“2012”等,从我指定的集合中随机获取。

不幸的是,COALESCE只返回第一个非空值,而不是指定的值。是否有一些功能,如:

IF column_value = 'NULL (or something)' THEN RAND(string1, string2, string3, string4).
Run Code Online (Sandbox Code Playgroud)

提前致谢。

null sql-server ssms t-sql

5
推荐指数
1
解决办法
166
查看次数

计算每行 NULL 值

我想在不枚举列名的情况下计算表中每行存在的空值数。例如:

WITH t as (VALUES
  (NULL ,'hi',2,NULL,'null'),
  ('' ,'hi',2,3,'test'),
  (NULL ,'hi',2,3,'null')
)
SELECT countnulls(t)
FROM t;
Run Code Online (Sandbox Code Playgroud)

会导致:

numnulls
2
0
1
Run Code Online (Sandbox Code Playgroud)

我能得到的最接近的是以下黑客row_to_json()

select 
(CHAR_LENGTH(row_to_json(t)::text)
 - CHAR_LENGTH(REPLACE(row_to_json(t)::text, 'null', '')))/4 from t;
Run Code Online (Sandbox Code Playgroud)

这是......相当的黑客(不是很好)。它可以工作,有点,但是当它出现在实际数据或列名中时,它会将字符串 'null' 计为 NULL。所以在上述情况下是不正确的。

postgresql null isnull postgresql-9.6

5
推荐指数
1
解决办法
4531
查看次数

如何在 Oracle SQL 中添加命名约束?

我有一张桌子。我需要向NOT NULL其中一列添加约束。这是我对解决方案的最佳尝试:

alter table clookup add CONSTRAINT lookup_9 NOT NULL (clookup_col)

ERROR at line 1: ORA-00904: : invalid identifierNOT NULL零件上产生。为什么?

null oracle constraint syntax

5
推荐指数
1
解决办法
1428
查看次数

是否有与 NULLIF 相反的函数?

我知道NULLIF比较两个值并NULL在匹配时返回的函数。

是否有一个函数可以比较两个值并NULL在它们匹配时返回?即过滤掉其他值。

我知道我可以使用CASE以下方法做类似的事情:

CASE column WHEN value THEN 1 END
Run Code Online (Sandbox Code Playgroud)

我也知道我可以写一个函数。

也许有一个NULLIF我不知道的微妙使用技巧。

我认为NULLIF是通用的。我正在寻找一个通用的解决方案,以便它可以应用于任何标准数据库。

null sql-standard

5
推荐指数
1
解决办法
920
查看次数

如何在表扫描期间不锁定表的情况下将列设置为 NOT NULL?

(前一个问题是:将多个列设置为非空时,Postgres 会使用多列索引吗?)


通常,当我将列设置为非空时,如果它没有索引,那么我首先添加它,以便 postgres 可以(希望)在锁定表的同时进行表扫描时使用索引,以便表被锁定在较短的时间内。

我想设置几列不为空,如下所示:

alter table foos
  alter column bar1 set not null
  alter column bar2 set not null
  alter column bar3 set not null
  alter column bar4 set not null;
Run Code Online (Sandbox Code Playgroud)

如果我为这些列创建了多列索引,那么在进行此更改之前,postgres 会在扫描锁定表时使用它吗?

CREATE INDEX CONCURRENTLY my_index on foos (bar1, bar2, bar3, bar4);
Run Code Online (Sandbox Code Playgroud)

如果我在 IS NULL(或 IS NOT NULL)上建立了部分索引怎么办

CREATE INDEX CONCURRENTLY my_index on foos (bar1, bar2, bar3, bar4) where bar1 is null and bar2 is null and bar3 is null and bar4 is null;
Run Code Online (Sandbox Code Playgroud)

postgresql index null alter-table locking

5
推荐指数
1
解决办法
928
查看次数

VARCHAR NULL 存储

我在网上某处和 Microsoft Press 的书中读到了一个字段声明属性,可用于指示 NULL VARCHAR 值不应在叶级消耗空间,而不是每个叶消耗几个字符。

有人可以帮我确定该属性在哪里吗?

我不记得 Attribute 关键字是什么,但我记得看到它是因为保存空的 2 个字节并使其成为没有数据的 0 字节存储的价值。

sql-server-2008 null sql-server-2008-r2

4
推荐指数
1
解决办法
149
查看次数