2015-05-14 6 views
2

У меня есть простой SQL вставки запрос:SQL запрос не выбирает значение

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

Но иногда COL2 значение NULL, потому что SELECT не не поднимайте ничего (имя существует) является возможность защиты от пустых записей ? Или мне нужен скрипт изменения и сохранить выбор перед вставкой (внешняя вставка)? Это случается не регулярно, но ~ 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.

Смежные вопросы