数据库怎么用非空值填充为空值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库怎么用非空值填充为空值?相关的知识,希望对你有一定的参考价值。

有一个表,结构如下:name列和评价列
name 评价
张 100

李 96
李 null
赵 98
赵 98
请问怎么把空值和null值更新为非空值。
update votexinxiinfo
set votexinxiinfo.评价=a.评价
from
(select * from votexinxiinfo where 评价 is not null or 评价 !='') as a
where votexinxiinfo.评价 is null or 评价 ='' and votexinxiinfo.name=a.name
怎不行?
分拆开怎么就行呢?
update votexinxiinfo
set votexinxiinfo.评价=a.评价
from
(select * from votexinxiinfo where 评价 is not null) as a
where votexinxiinfo.评价 is null and votexinxiinfo.name=a.name

update votexinxiinfo
set votexinxiinfo.评价=a.评价
from
(select * from votexinxiinfo where 评价 !='') as a
where 评价 ='' and votexinxiinfo.name=a.name
求解?还有别的办法么?

首先明确一下null 和 '' 相等,都是空值。在where从句中,一般都是用 is null 或 not is null 方式;在为变量或列赋值时,一般采用 '' 方式。
如果想把列值设置为空,直接用update语句赋空值就可以了。update 表 set 评价='' where ... ;
你的语句中想把非空的值赋给空值的评价列中,但没有明确指出哪一行的评价列赋给空值列。这里需要通过主键一一对应才行。update的子查询写法如下:
update votexinxiinfo set 评价=(select 评价 from votexinxiinfo where ...) where ...;
参考技术A update votexinxiinfo
set votexinxiinfo.评价=a.评价
from
(select * from votexinxiinfo where 评价 is not null or 评价 !='') as a
where (votexinxiinfo.评价 is null or 评价 ='') and votexinxiinfo.name=a.name;

你把or的那两个东西用括号括起来,要不逻辑关系是有问题的本回答被提问者采纳

不可为空的属性必须包含关于 EF 关系的非空值警告

【中文标题】不可为空的属性必须包含关于 EF 关系的非空值警告【英文标题】:Non-nullable property must contain a non-null value warning on EF relationships 【发布时间】:2022-01-07 02:26:11 【问题描述】:

C# 编译器向我显示Non-nullable property must contain a non-null value on:

EFrelationships DbSet

根据本文档:Working with Nullable Reference Types 我可以使用以下方法消除DbSet 的警告:

public class DataContext : DbContext

    public DataContext(DbContextOptions options) : base(options) 
    
    public DbSet<Customer> Customers => Set<Customer>();
    public DbSet<Order> Orders => Set<Order>();

对于 EF relationships 以及以下示例,消除此警告的最佳方法是什么(不使用 #pragma warning disable CS8618)?

public class Customer

    public Guid CustomerId  get; set;  = Guid.NewGuid();
    public string Username  get; set; 
    public virtual IEnumerable<Order> Orders  get; set; 

    public Customer(string username)
    
        // still gets warning for `Orders`
        Username = username;
    

在关系的另一边:

public class Order

    public Guid OrderId  get; set;  = Guid.NewGuid();
    public string Description  get; set; 
    public Guid CustomerId  get; set; 
    public virtual Job Job  get; set; 

    public Log(string description, Guid customerId)
    
        // still gets warning for `Job`
        Description = description;
        CustomerId = customerId;
    

【问题讨论】:

你真的使用可为空的引用类型吗? 【参考方案1】:

回答我自己的问题我相信这是在 EF relationships 中删除警告的最合适方法:

public class Customer

    public Guid CustomerId  get; set;  = Guid.NewGuid();
    public string Username  get; set; 
    public virtual IEnumerable<Order> Orders  get; set;  = null!;

    public Customer(string username)
    
        Username = username;
    

在关系的另一边:

public class Order

    public Guid OrderId  get; set;  = Guid.NewGuid();
    public string Description  get; set; 
    public Guid CustomerId  get; set; 
    public virtual Job Job  get; set;  = null!;

    public Log(string description, Guid customerId)
    
        Description = description;
        CustomerId = customerId;
    

但如果有人有更好的想法,请随时分享。

【讨论】:

是的,我认为最好的方法是要么初始化它们,要么改变你的数据模型,但这样你就不能再使用可空类型了

以上是关于数据库怎么用非空值填充为空值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 中用该列的第一个非空值填充该列的空值

在除前两列之外的每列上前向填充具有最新非空值的空值

sql查询不为空的字段

Kotlin 中的非空值产生空指针异常

sql 查询时有空值返回0怎么写

用python.检查“影片名称”字段为空值的+数据,给该字段填充数+据"unnamed"?