MariaDB: ВСТАВИТЬ ... ВЫБРАТЬ с пустыми значениями тоже - PullRequest
0 голосов
/ 15 октября 2019

Я хочу вставить данные из другой неполной таблицы, поэтому некоторые значения должны быть пустыми в полях NOT NULL.

Например, у меня есть две таблицы: people и peopleTemp.

В человек таблица, у меня есть много полей: номер_показа , имя_символа , фамилия , пол , тел и т. Д. В таблице peopleTemp , у меня есть только номер_узла , first_name , last_name и специальное поле updated , установленное после запроса UPDATE.

Теперь я хочу вставить человека, которого нет в people . Пол и тел НЕ НУЛЬТЫ, но должны быть пустыми. Я пытаюсь:

INSERT INTO people p1 (gender, tel, permit_number, first_name, last_name)
                VALUES ('','', (
                SELECT permit_number, first_name, last_name
                FROM peopleTemp p2
                WHERE p2.updated = 0))

Но я получаю эту ошибку: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

Можете ли вы помочь мне разрешить эту ситуацию? Заранее спасибо!

Дополнительный вопрос: Могу ли я SET p2.updated = 1 в конце запроса?

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Вы можете исправить синтаксическую ошибку, используя insert . . . select:

INSERT INTO people p1 (gender, tel, permit_number, first_name, last_name)
    SELECT '', '', permit_number, first_name, last_name
    FROM peopleTemp p2
    WHERE p2.updated = 0;

Я бы предложил использовать NULL вместо пустой строки для представления отсутствующего значения.

0 голосов
/ 15 октября 2019

На ваш дополнительный вопрос .. Нет, вы не можете. SET работает с UPDATE... Если вы хотите обновить p2.updated = 1 после выполнения INSERT, необходимо выполнить дополнительный запрос UPDATE к таблице peopleTemp таблица JOIN с таблицей people для проверки. Должно работать что-то вроде ниже:

... after you done INSERT query suggested by Gordon

UPDATE peopleTemp p2 
JOIN   people p1
ON     p2.permit_number=p1.permit_number 
AND    p2.first_name=p1.first_name
AND    p2.last_name=p1.last_name
SET    p2.updated=1
WHERE  P2.updated=0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...