目前,我只是想从临时表中删除 Name 列为 Null 的对象,其中包含以下内容...
delete from #PulledData
where #PulledData.Name0 = NULL
Run Code Online (Sandbox Code Playgroud)
我也试过= 'NULL',= '%NULL%'等等,但似乎没有任何效果。我很感激这件事上的一些帮助。
我和之前的帖子有同样的问题:PostgreSQL 多列唯一约束和 NULL 值。但是那里的解决方案不适用,因为我使用的是 MySQL 而不是 PostgreSQL。
我的桌子看起来像这样:
CREATE TABLE `my_table` (
`id` bigint(20) NOT NULL,
`col1` bigint(20) NOT NULL,
`col2` bigint(20) NOT NULL,
`col3` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)
我想要三列col1,col2并且col3是独一无二的。但是一个正常的唯一约束
UNIQUE KEY `unique_constraint` (`col1`,`col2`,`col3`)
Run Code Online (Sandbox Code Playgroud)
仍然允许我插入相同的行,其col3为NULL. 我想禁止这样的条目:
1 | 1 | 1 | NULL
2 | 1 | 1 | NULL
Run Code Online (Sandbox Code Playgroud)
我在上面的帖子中提出了在 MySQL 中搜索部分唯一约束,但显然 MySQL 5.5 不支持。
有人可以给我一个提示,如何在 mysql 中最好地解决这个问题,我也希望有一个高性能的解决方案!
感谢 mysql 的新手(来自 PostgreSQL)!
上下文:MS SQL Server 2012
在使用 Kendra Little 的强大工具 sp_BlitzIndex 时,许多表被诊断为“索引囤积者:沉迷于空值”。
我不是在寻找关于 NULL 及其位置的辩论。我知道在某些情况下 NULL 非常合适,甚至是必要的。这里的问题是 sp_BlitzIndex 提供的反馈,以及强制执行 not NULL 约束的值。
在 sp_BlitzIndex 被“诊断”为具有许多允许 NULL 的列的大多数表中,没有任何实际的 NULL 值。我们以编程方式不允许它们。我只是从未取消选中“允许空值”框以在数据库级别强制执行该约束。
强制执行此约束有什么好处,为什么它是她的脚本确定的问题之一?
谢谢!
我最近被这个“功能”咬了。
如果您的hstore列未初始化并且您开始向其中添加条目,则它们都会被无声地吞下而不会出错。
这是预期的吗?
create table test_hstore(id int, map hstore);
insert into test_hstore(id,map) values(0, '');
INSERT 0 1
select * from test_hstore ;
id | map
----+-----
0 |
update test_hstore set map = map || hstore('key1', 'value1') where id = 0;
UPDATE 1
select * from test_hstore;
id | map
----+------------------
0 | "key1"=>"value1"
update test_hstore set map = null where id = 0;
UPDATE 1
select * from test_hstore;
id | map
----+--------
0 | (null)
update …Run Code Online (Sandbox Code Playgroud) 我有一个Engagement带有四个字段的 Access 表:
Emp_id, Year, Week, Act_id
Run Code Online (Sandbox Code Playgroud)
它记录员工何时/曾参与某项活动。每个字段都是数字,每个字段都构成复合主键的一部分。应用程序的语义是每个条目(每个Emp_id- Year- Week-Act_id组合)必须是唯一的。也就是说,虽然员工通常会有不同的年周和不同的活动,但员工有时可以在不同的年周从事相同的活动,甚至可以在同一年的周从事不同的活动。不允许有空值。一切正常。
现在我需要扩展/修改语义以允许与任何给定员工活动相关的未知——或更恰当地说,未披露——年-周值。当然,尝试输入带有空的 Year-Week 的行会导致“索引或主键不能包含 Null 值”。所以我需要改变表格设计。
我尝试过的一件事是通过在“索引”窗口中关闭“主”(并保持“唯一”状态)将主键索引转换为非主索引。这正确地防止了年-周值非空的重复记录——但它允许年-周为空的重复记录。
例如,使用上述非主、唯一索引,允许以下数据:
Emp_id Year Week Act_id
7 2014 12 31 } Same activity,
7 2015 22 31 } different dates.
7 2015 33 32
7 2015 40 33 } Same dates,
7 2015 40 34 } different activities.
7 2016 2 36
7 38 } Different activities,
7 39 } undisclosed dates.
Run Code Online (Sandbox Code Playgroud)
随后不允许添加以下任何内容:
Emp_id …Run Code Online (Sandbox Code Playgroud) 我有一个与下面结构相似的表,一个字段中有一个NULL值。当我查询表时,这条记录没有返回,它被省略了。应如何更改查询以返回此记录?
Declare @Fiesty Table
(
numberfour varchar(100)
,valid varchar(20)
)
Insert Into @Fiesty (numberfour, valid) Values
('1ACRELBS', NULL), ('4ACRELBS', 'Green'), ('17ACRELBS', 'White')
Select * FROM @Fiesty WHERE valid NOT IN ('Green', 'Blue', 'White')
Run Code Online (Sandbox Code Playgroud)
我预期的返回结果将是 numberfour = 1ACRELBS
SQL Server 有一个带有可选唯一列的怪癖:null一个表中不能有多个。
例如:
create table employees (
id int identity(1,1) primary key,
givenname nvarchar(24) not null,
familyname varchar(24) not null,
tfn char(9) unique -- optional, but unique
);
Run Code Online (Sandbox Code Playgroud)
(在澳大利亚,我们有一个纳税人独有的税号)。
以下是一种解决方法:
create table employees (
id int identity(1,1) primary key,
givenname nvarchar(24) not null,
familyname varchar(24) not null,
tfn char(9)
);
CREATE UNIQUE NONCLUSTERED INDEX uq_employees_tfn ON employees(tfn)
WHERE tfn IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
是否可以命名一个唯一的约束并给它上述条件是一种类似于第一个示例的方式?也就是说,是否可以在列定义中包含更复杂的约束?
我有一张桌子,Id作为主键。
create table Anything
(
Id bigint not null primary key identity(1, 1)
)
Run Code Online (Sandbox Code Playgroud)
当我查看 中的这张表时Object Explorer,我当然会看到这张图片:
正如你所看到的,列Id是不为空。
然后我在这个虚拟表上创建一个虚拟视图:
create view IdIsTwoView
as
select
Id,
(
case
when Id = 2
then cast(1 as bit)
else cast(0 as bit)
end
) as IdIsTwo
from Anything
Run Code Online (Sandbox Code Playgroud)
但这一次,在对象资源管理器中,我看到了这个结果:
如您所见,尽管我的case子句包罗万象,涵盖了所有记录的 100%,并且对所有记录都有答案,但它可以为空。
为什么 SQL Server 有这种奇怪的行为?我如何强制它不为 null?
PS我们有一个动态生成代码的基础设施,这种行为给我们带来了麻烦,我们必须手动将bool?C# 中的所有类型更改为bool.
我们维护一个用 PostgreSQL 和 python 实现的大型数据仓库。我们所做的一种非常常见的模式是进行更新插入,并在更新时进行记录。我们有一些独特的键my_key和值,例如my_uuid, my_text, my_int, my_date。如果给定的任何这些值发生变化,my_key我们希望更新该行。没关系,我们有一个运行良好的模式:
insert into my_table (
my_key,
my_uuid,
my_text,
my_int,
my_date
)
select
some_key,
some_uuid,
some_text,
some_int,
some_date
from some_table
on conflict (my_key) do update set
some_uuid = excluded.some_uuid,
some_text = excluded.some_text,
some_int = excluded.some_int,
some_date = excluded.some_date,
update_timestamp = now()
where
coalesce(my_table.some_uuid, uuid_nil()) <> coalesce(excluded.some_uuid, uuid_nil())
or coalesce(my_table.some_text, '') <> coalesce(excluded.some_text, '')
or coalesce(my_table.some_int, -1) <> coalesce(excluded.some_int, -1)
or coalesce(my_table.some_date, '3000-01-01'::date) <> coalesce(excluded.some_date, '3000-01-01'::date)
Run Code Online (Sandbox Code Playgroud)
最后一个on conflict …
我正在使用 Postgres。val text NULL CHECK(val <> '')使用(或varchar) 和之间在存储或性能方面是否有显着差异val text NOT NULL?文本不能为空。因此,空文本可以作为未设置的标记。但是,例如,根据存储情况,它有什么区别吗?
我知道,我失去了空文本的 NULL 魔法,但这并不重要。另一方面,我可以更轻松地导入应用程序,因为我不必处理NULL. 它只是字符串输入,字符串输出。
null ×10
sql-server ×5
postgresql ×3
update ×2
constraint ×1
hstore ×1
index-tuning ×1
ms-access ×1
mysql ×1
mysql-5.5 ×1
primary-key ×1
upsert ×1
view ×1