Вставка строк в таблицу MySQL на основе запроса - PullRequest
2 голосов
/ 28 октября 2010

У меня есть запрос

SELECT A.a, A.b, A.c
FROM A
LEFT JOIN X ON A.a = X.x
WHERE X.x IS NULL

, который находит записи в таблице A, у которых нет соответствующей записи в таблице X. Как я могу вставить результаты этого запроса в таблицу X?Если бы у меня было всего несколько записей, я бы сделал

INSERT INTO X(xa, xb, xc)
VALUES ('a1', 'b1', 'c1'), ('a2', 'b2', 'c2')

(В качестве отступления: для столбца d установлено значение auto_increment; будет ли это правильно, если я выполню вышеприведенное?, ..., h имеют значения по умолчанию; я надеюсь, что они будут установлены соответствующим образом.)

Это не составит труда сделать путем экспорта, написания отдельных фрагментов SQL для каждой строки в Excel и выполнения каждой из них;Я прошу это, главным образом, для лучшего изучения SQL.

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

Ответы [ 3 ]

2 голосов
/ 28 октября 2010
INSERT INTO X (xa, xb, xc) 
   SELECT A.a, A.b, A.c
     FROM A
LEFT JOIN X ON A.a = X.x
    WHERE X.x IS NULL
0 голосов
/ 28 октября 2010

Вы можете использовать синтаксис INSERT ... SELECT.Но вам придется использовать временную таблицу, поскольку вы не можете вставить ее в таблицу, в которую вы входите, в операторе select.

create temporary table Y like X;
INSERT INTO Y (x,y,z) SELECT a,b,c FROM A LEFT JOIN X ON a=x;
INSERT INTO X SELECT * FROM Y;
0 голосов
/ 28 октября 2010

Попробуйте это:

INSERT INTO X(xa, xb, xc)
SELECT A.a, A.b, A.c
  FROM A
  LEFT JOIN X ON A.a = X.x
 WHERE X.x IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...