Как вставить данные с подзапросом, используя SELECT * как VALUE? - PullRequest
0 голосов
/ 20 февраля 2020

У меня 2 запроса. Первый запрос

SELECT date 
FROM tableA 
WHERE 
    db='mydb' AND 
    date > (SELECT MAX(date) FROM tableB WHERE db='mydb') 
LIMIT 1;

Второй запрос

INSERT INTO tableB (date, db, comment) 
SELECT * FROM tableA 
WHERE 
    db = 'mydb' AND 
    date = (date that i got from first query);

Типы данных: db(VARCHAR), date(date), comment(mediumblob).

оператор SELECT * FROM tableA WHERE db = 'mydb' AND date = (date that i got from first query); возвращает ровно 1 строку, но как-то секунду запрос возвращает, что 1242 - Subquery returns more than 1 row.

Я пытался изменить оператор SELECT * для каждого столбца, но он не работал для столбца comment. И это невозможно сделать по триггеру, поскольку таблица A находится в системной таблице.

1 Ответ

0 голосов
/ 20 февраля 2020

Насколько я понимаю цель, вы пытаетесь скопировать все значения fre sh из A в B. Здесь "fre sh" означает "дата еще не существует в целевой таблице".
I думаю, что это можно упростить по этому запросу:

INSERT INTO `tableB` (`date`, `db`, `comment`) 
SELECT `date`, `db`, `comment` 
FROM `tableA` 
WHERE `db` = 'mydb' 
AND `date` > (SELECT MAX(`date`) FROM `tableB` WHERE `db` = 'mydb')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...