2010-10-28 4 views
2

У меня есть запросВставка строк в таблицу MySQL на основе запроса

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

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

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

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

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

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

ответ

2
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

+1: Ударьте меня на 29 секунд! –

+0

Я не верю, что это сработает, потому что select ссылается на таблицу, в которую он вставляет. – Cfreak

+0

@Cfreak: 'X' - это не та же таблица –

0

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

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

Вы можете использовать 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;