обновить существующую строку новыми строками и данными из другой таблицы - PullRequest
0 голосов
/ 15 апреля 2020

У меня просто

CREATE table1
(
  common INT, 
  var1 VARCHAR, 
  var2 VARCHAR, 
  var3 VARCHAR,
  var4 VARCHAR,
  var5 VARCHAR,
  var6 VARCHAR
)
CREATE table2
(
  common INT,
  var4 VARCHAR,
  var5 VARCHAR,
  var6 VARCHAR
)

INSERT table1 VALUE(0,"test1","test2","test3",NULL,NULL,NULL)
INSERT table2 VALUE(0,"test4","test5","test6")

Что я пытаюсь получить в 1-й строке таблицы 1 или где обычно = 0:

row1:
common = 0,
var1 = "test1",
var2 = "test2",
var3 = "test3",
var4 = "test4",
var5 = "test5",
var6 = "test6"

Вместо этого я получаю:

row1:
common = 0,
var1 = "test1",
var2 = "test2",
var3 = "test3",
var4 = NULL,
var5 = NULL,
var6 = NULL

row2:
common = 0,
var1 = NULL,
var2 = NULL,
var3 = NULL,
var4 = "test4",
var5 = "test5",
var6 = "test6"

Я пытался использовать оператор INSERT INTO .. ​​SELECT, но получал только новые строки, а не новые данные в строках таблицы table1, где common = 0

INSERT INTO table1 (table1.var4,table1.var5,table1.var6)
SELECT  table2.var4, table2.var5, table2.var6
FROM table2
WHERE common = 0

Я понимаю, почему это только добавляет строку, но Есть ли способ обновить существующую строку новыми строками и данными из другой таблицы более или менее таким же образом?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Очень часто я отвечаю на свои вопросы

UPDATE table1 a 
INNER JOIN table2 b ON a.common = b.common
SET a.var4=b.var4,a.var5=b.var5,a.var6=b.var6
WHERE a.common=b.common

делает именно то, что мне нужно, и следует тому же самому простому синтаксису оператора INSERT.

0 голосов
/ 15 апреля 2020

Вы можете написать после триггера INSERT ON table2 и внутри таблицы обновлений 1

Как

DELIMITER $$

CREATE TRIGGER after_members_insert
AFTER INSERT
ON table2 FOR EACH ROW
BEGIN
    UPDATE table1 SET var4 = NEW.var4,var5 = NEW.var5,var6 = NEW.var6
    WHERE common = NEw.common 
END$$

DELIMITER ;

Если столбец в table1 не существует, вы потеряете вставку.

Если вы хотите вставить новую строку в таблицу1, вы должны проверить с помощью

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ ТАБЛИЦЫ 1 ГДЕ ОБЩАЯ = NEW.common) ИХ

если столбец уже существует. а затем решите, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...