为什么在已经存在具有相同属性的行时,这不会插入新行?

时间:2015-10-22 20:25:28

标签: sql postgresql

为什么:

INSERT INTO tableex (C1, C2) 
SELECT null, 'stringtext' WHERE NOT EXISTS (SELECT * FROM tableex WHERE C1 = null AND C2 = 'stringtext');

当C1 = null且C2 =' stringtext'的行时插入新行已经存在?如何修复它,只有在表中没有具有相同属性的行时才会插入。

2 个答案:

答案 0 :(得分:1)

 WHERE NOT EXISTS (SELECT * FROM tableex WHERE C1 = null AND C2 = 'stringtext')

c1 = null评估为nullnot exists计算结果为true,因此将值插入表中。

您应该使用c1 is null代替。

答案 1 :(得分:0)

您正在测试C1 = NULL,但您需要使用:

C1 IS NULL 

SQL认为null不等于另一个null