插入if select返回一行


inserting if select returns a row

使用MS SQL-SERVER

我想知道是否有可能或更好地说,在插入的值之一依赖于另一个表的情况下,将值插入表中是最有效的方法,如果另一个表格上不存在Select查询,它就不会这样做。

例如下一个查询

INSERT INTO producto VALUES 
('ad-101', '27', 'Nissan','NP300','2016','aer3457','1',(SELECT Id from Inventario WHERE Serie = '5161017293')),
('ad-102', '27', 'Nissan','NP300','2015','aer5647','1',(SELECT Id from Inventario WHERE Serie = '5161019329'))

如果5161019329不在Inventory表上,则只插入1行。

我知道我总是可以为选择部分做一个单独的查询,然后在php上做逻辑来插入或不插入,但这并没有那么有效,因为有时我可以一次插入100行。

谢谢,

如果您选择的ID号返回的列不是可为null的列,mysql应该阻止插入并引发错误。

您可以使用以下查询,它应该可以工作

INSERT INTO producto
SELECT
'ad-101', '27', 'Nissan','NP300','2016','aer3457','1', Id FROM Inventario WHERE Serie = '5161017293'

如果Serie 5161017293的Incentario中没有行,则不会插入任何数据。

PDO有一个rowCount()函数,可以调用该函数来计算您所做查询的行数,如果这就是您的意思的话。(这个问题没有真正的意义)

你可以试试:

$query = $handler->query("Your select query");
if ($query->rowCount() == 0) {
  // Insert Query
}

除此之外,我没有太多使用MySQLi连接,但您可以使用从0开始的$count++变量循环查询,然后如果$count变量等于0,则稍后在逻辑中插入查询。

如果答案没有意义,很抱歉,但问题也没有意义。