Как вставить данные в определенный столбец без нулей в других столбцах?

у меня есть таблица ("table1") с 3 столбцами, называемыми col1, col2 и col3 (каждый VARCHAR) с 4 значениями, как показано ниже:

col1   col2   col3
datA1  datB1  datC1
datA2  

мне нужна возможность добавлять данные в любое время в любой столбец, не влияющий на другие. Очень популярный код в Интернете заключается в том ,что (скажем, нам нужно добавить данные только в столбцы col2 и col3):

INSERT INTO table1 (col2, col3)
VALUES ('datB2', 'datC2');

но он добавляет новые строки, как показано ниже:

col1   col2   col3
datA1  datB1  datC1
datA2
NULL   datB2  datC2

что мне действительно нужно, чтобы заполнить строку, начиная с значение " datA2 "в столбце" col1 " с новыми значениями и получить таблицу, как показано ниже:

col1   col2   col3
datA1  datB1  datC1
datA2  datB2  datC2

если бы кто-то мог мне помочь, я был бы очень признателен!!! Спасибо. Арсений.


обновление: Таблица содержит 3 столбца и ответы каждого столбца для определенного типа значений (например: имя, цвет, размер). Мне нужна только возможность добавлять новые значения в любое время в определенный столбец и иметь их без Null и новых строк, если раньше у него была Свободная ячейка.

6 ответов


учитывая структуру таблицы, с двумя рядами данных:

key         value
--------------------
team        accounts
manager     jeff

каждый раз, когда вы хотите изменить значение, вам нужно проверить, есть ли оно уже (для обновления) или нет (для вставки). Итак, чтобы изменить значение manager свойства:

if exists(select * from keyValues where key = 'manager')
    update keyValues set value = 'mike' where key = 'manager'
else
    insert into keyValues ('manager', 'mike')

Я нашел решение (цепочка логических операций):

1) CHECK Если есть ячейка (в целевом столбце) со значениями либо "" или NULL.

2) IF у него есть один из тех, кто затем переписывает первый, сохраняя значения других ячеек в этой строке на своих местах (предположительно, мы используем UPDATE))) ).

3) ELSE просто добавьте новую строку со всеми NULLs в другой ячейке в строке.

если мы хотим добавить несколько значений в различные столбцы одновременно мы можем подготовить наши запросы для всех из них, а затем выполнить их одновременно (извините за тавтологию).

если нам нужно добавить несколько значений в один столбец в рамках одного запроса, мы можем подготовить его, используя циклы (повторяя пункты 1 и 2 (или, необязательно, 3).


UPDATE table1
SET col2 = dataB2, col3 = dataC2
WHERE col1 = dataA2;

Это может служить вашей цели :)


вам придется использовать UPDATE оператор, если вы хотите добавить данные в существующую строку. Как это, например:

UPDATE table1 SET
col2 = 'data5'
col3 = 'data6'
FROM table1
WHERE col1 = 'data4'

также похоже, что корень вашей проблемы-плохой дизайн базы данных, но этот запрос просто показывает, как добавить данные в существующую строку.


используйте этот:

INSERT INTO table1 (col2, col3)
VALUES ('datB2', 'datC2')
WHERE col1 = datA2;

используйте это, если значение null затем вставить пустое значение.

$cal1=$cal1 ? "data5" : '';
$cal2=$cal2 ? "data6" : '';
INSERT INTO table1 (col2, col3)
VALUES ("'.$cal1.'", "'.$cal2.'");