假设PostgreSQL中有两个表。表 A 的字段 x ,其类型为字符变化,并且有很多重复项。表 B 包含字段 y , z 和 w 。 y 是序列列, z 与 x 的类型相同, w 是一个整数。
如果我发出此查询:
INSERT INTO B
SELECT DISTINCT ______, A.x, COUNT(A.x)
FROM A
WHERE x IS NOT NULL
GROUP BY x;
无论______
中有什么,我都会收到错误消息。我甚至像CAST(NULL as INTEGER)
那样充满异国情调,但这只是给了我这个错误:
列“id”中的空值违反了非空约束
有简单的解决方案吗?
答案 0 :(得分:4)
在使用INSERT时,您被允许甚至鼓励您指定列(并且您确实总是指定列):
insert into b (z, w)
select x, count(x)
from a
where x is not null
group by x
当你distinct
已经按x
进行分组时,我看不到{{1}}的重点,所以我放弃了它;我也删除了列前缀,因为它们不是必需的,只是为SQL添加了噪音。
如果您在使用INSERT时未指定列,则会获得默认值,这将为您提供您正在寻找的序列值。