如果select返回一行,则插入

时间:2016-04-09 22:36:32

标签: php sql-server select insert

使用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 Invetory,则只插入了1行。

我知道我总是可以对选择部分进行单独的查询,然后在php上插入或不插入我的逻辑,但这并不是那么有效,因为有时我可以同​​时插入100行。< / p>

谢谢,

3 个答案:

答案 0 :(得分:0)

如果您选择的ID号返回的列不是可为空的列,则mysql应该阻止插入并抛出错误。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

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

你可以尝试:

$query = $handler->query("Your select query");

if ($query->rowCount() == 0) {
  // Insert Query
}

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

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