Sql 在可能有多行的数据库中插入一行

Sql 在可能有多行的数据库中插入一行,sql,database,postgresql,Sql,Database,Postgresql,我使用的是PostgreSQL,表如下: 表名:ip4\u银行 字段1:ip4\U地址 字段2:nic\u id 默认情况下,此表将包含字段2设置为null的IPv4地址列表。 我要做的是运行一个查询,将nic\u id分配给下一个可用的IP4地址 到目前为止,我的问题是: INSERT INTO ip4_bank (nic_id) VALUES ('1') WHERE nic_id = null 但这将用'1'的nic\u id填充该表,其中所有值以前都设置为null 任何人对如何将nic

我使用的是PostgreSQL,表如下:

表名:
ip4\u银行

字段1:
ip4\U地址

字段2:
nic\u id

默认情况下,此表将包含字段2设置为null的IPv4地址列表。 我要做的是运行一个查询,将
nic\u id
分配给下一个可用的IP4地址

到目前为止,我的问题是:

INSERT INTO ip4_bank (nic_id) VALUES ('1') WHERE nic_id = null 
但这将用
'1'
nic\u id
填充该表,其中所有值以前都设置为null


任何人对如何将
nic\u id
值插入一行有任何想法吗?

假设“next available”是最低的IP,请尝试以下操作:

UPDATE ip4_bank SET nic_id = 1
WHERE nic_id is null
AND ip4_address = (SELECT MIN(ip4_address)
                   FROM ip4_bank
                   WHERE nic_id is null)

假设“下一个可用”是最低IP,请尝试以下操作:

UPDATE ip4_bank SET nic_id = 1
WHERE nic_id is null
AND ip4_address = (SELECT MIN(ip4_address)
                   FROM ip4_bank
                   WHERE nic_id is null)

您需要准确定义“下一个可用的IP4地址”的含义。当您说“下一个可用”时,是什么标准确定了这一点。我不知道postgresql,但在某些实现中,您可以在
插入
/
更新
命令上指定
限制
(或相关)…您的模式不包含任何“下一步”含义的指标。您如何知道一行比另一行更近?您需要准确定义“下一个可用的IP4地址”的含义。当您说“下一个可用”时,有什么标准来确定这一点。我不知道postgresql,但在某些实现中,您可以在
插入
/
更新
命令上指定
限制
(或相关)…您的模式不包含任何“下一步”含义的指标。您如何知道一行比另一行更近?在ip地址上下文中,“最小值”是什么意思?当然,较低的第一个八位组并不意味着地址是最先发布的。。。除非您谈论的是具有策略要求的intranet地址。没错,没有办法告诉您创建地址的顺序(使用我们提供的信息)。除非使用
issue_date
列或类似列,否则这可能是执行映射的最简单和最简单的方法(很方便,ip4_地址也应该是唯一的…)。但如果它是字符串,则此排序方法将不正确。这是怎么回事?除非有必要的顺序,否则我们只需要更新一条记录,哪条记录并不重要。110.0.0.1将在12.0.0.10之前对字符串进行排序。我同意你的看法,它将根据某种顺序选择一行。。。我的观点是这里的顺序没有多大意义。在ip地址的上下文中,“最小”是什么意思?当然,较低的第一个八位组并不意味着地址是最先发布的。。。除非您谈论的是具有策略要求的intranet地址。没错,没有办法告诉您创建地址的顺序(使用我们提供的信息)。除非使用
issue_date
列或类似列,否则这可能是执行映射的最简单和最简单的方法(很方便,ip4_地址也应该是唯一的…)。但如果它是字符串,则此排序方法将不正确。这是怎么回事?除非有必要的顺序,否则我们只需要更新一条记录,哪条记录并不重要。110.0.0.1将在12.0.0.10之前对字符串进行排序。我同意你的看法,它将根据某种顺序选择一行。。。我的观点是这里的顺序没有多大意义。