如何避免在postgres数据库中插入空值
我有以下查询插入到多对多连接表中的数据
INSERT INTO playlist_genre(playlist_id, genre_id) VALUES (${playlistId}, ${genre1Id}), (${playlistId}, ${genre2Id}), (${playlistId}, ${genre3Id}) );
但是我遇到的问题是genre2Id
和genre3Id
值不是用户所需要的,所以可以是INTEGER
或NULL
。
我正在试图find一种方法来写这个相同的查询,但它只能插入如果存在一个值。 两列都有NOT NULL
约束。
编辑 :
这是我的播放列表类
class Playlist { constructor(playlist) { // required fields this.title = playlist.title; this.playlistType = playlist.playlistType; this.userId = playlist.userId; this.numberOfTracks = playlist.numberOfTracks; this.lengthInSeconds = playlist.lengthInSeconds; this.genre1Id = playlist.genre1Id; // not required fields this.genre2Id = playlist.genre2Id || null; this.genre3Id = playlist.genre3Id || null; this.description = playlist.description || null; this.releaseDate = playlist.releaseDate || null; } save() { return new Promise((resolve, reject) => { db.one(sqlCreatePlaylist, this) .then((insertedPlaylist) => { // Here is where i want to use insertedPlaylist's id // to insert data into 'playlist_genre' table resolve(insertedPlaylist); }) .catch(error => reject(error)); }); }
这是sqlCreatePlaylist的样子
INSERT INTO playlists( user_id, title, playlist_type, number_of_tracks, duration, description, release_date ) VALUES( ${userId}, ${title}, ${playlistType}, ${numberOfTracks}, ${lengthInSeconds}, ${description}, ${releaseDate} ) RETURNING *;
只能插入不为空:
insert into playlist_genre (playlist_id, genre_id) select playlist_id, genre_id from (values (${playlistid}, ${genre1id}), (${playlistid}, ${genre2id}), (${playlistid}, ${genre3id}) ) s (playlist_id, genre_id) where genre_id is not null