2015-05-14 98 views
2

我有简单的SQL插入查询:sql查询不挑值

INSERT INTO db_name (COL1, COL2, COL3, ...) 
VALUES ('value1', (SELECT name FROM another_table WHERE id = :php_value), value3 .....) 

但有时因为SELECT不挑什么COL2值为NULL(形同虚设),才有可能从空记录保护?或者我需要改变脚本并保持选择之前插入(外插入)? 这种情况不是经常发生,但〜1/3000记录

+0

我认为我没有得到它的所有权,但也许你可以尝试使用isnull()或coalesce() – OzrenTkalcecKrznaric

+3

你的'COL3'值是'value3',它不是你'SELECT'的一部分。 – ughai

+0

@ughai我的错我指的是col2对不起 – Klapsius

回答

2

我认为问题是条件id = :php_value查询有时不返回数据。你能避免插入行表空name这样:

INSERT INTO db_name (COL1, COL2, COL3, ...) 
SELECT 'value1', name, 'value3',... 
FROM another_table 
WHERE id = :php_value 
+0

但another_table 100%有这个价值。也许服务器滞后或延迟? – Klapsius

+0

@Klapsius我不知道你的环境,所以我什么都不知道。我只能基于你的问题,所以我可以告诉这种情况'id =:php_value'有时无法正常工作。 – Parado

0

假设你正在使用PHP。 您可以使用默认值初始化名称变量,然后单独运行选择查询。

$name = ""; // or whatever you want the default value to be 
$query = "SELECT `name` FROM `another_table` WHERE `id` = '" + php_value + "'"; 

现在,您可以从查询的名称,并将其存储在$ name变量(可以先检查数据库返回的值是否不为空)。

然后,您可以创建下一个查询并运行嵌入$ name变量。