我有一个包含subject_id
列的主题表。在表中,我有一行subject_id
为null,而subject_id
具有不同的值。
我正在寻找单个查询,我可以根据subject_id获取数据。
Select * from subject where subject_id = x;
如果没有找到w.r.t.x的数据,那么它应该返回subject_id = null的行
一般来说,这是一个非常糟糕的表模式。从长远来看,NULL作为主键值只会给您带来痛苦。当您的查询不匹配其他行时,使用null键行作为默认值将导致意外的奇怪行为。
最简单的方法是将NULL行作为任何查询的最后一行,然后只获取第一行。但是,只有当您的查询最多只能返回一个有效结果时,这才有效。
select *
from subject
where subject_id = ? or subject_id is null
order by subject_id asc nulls last
对于subject中的默认/占位符行,NULL PK可能最大的问题是,在其他任何地方,您都有一个NULL subject_id,不能简单地使用x.subject_id = y.subject_id连接到该行。
如果你真的需要这样的行,我建议使用-1而不是NULL作为"不存在"价值。这将使你的生活更容易,特别是如果你需要加入它。