2009-04-06 2 views
0

Я использую MySQL. Я хочу вставить некоторые записи в таблицу при условии, что они не существуют в другой таблице. Поэтому я хочу, чтобы выполнить что-то вроде этого:Вставка записей в таблицу MySQL в зависимости от существующих значений в другой таблице

INSERT INTO sales (name, id) 
SELECT name, id FROM sales_h 
WHERE name AND id NOT IN (SELECT name, id FROM T_sales); 

Проблема заключается в том, что MySQL не допускает такого рода синтаксис (что-то делать с где п ...) Я попытался с помощью CONCAT, но без результата.

Любой ключ?

ответ

0

Вы не можете сказать, где имя и идентификатор NOT IN ... вам нужен отдельный пункт для каждого. Но у вас есть id как первичный ключ в таблице T_sales? Если это так, то это все, что вам нужно проверить, зр что-то вроде:

INSERT INTO sales (name, id) 
(SELECT name, id FROM sales_h WHERE id NOT IN (SELECT id FROM T_sales)); 

EDIT

Хммм из ответов других людей может быть лучше игнорировать меня, как они, кажется, знают больше :-)

1
INSERT 
INTO sales (name, id) 
SELECT name, id 
FROM sales_h 
WHERE (name, id) NOT IN 
     (
     SELECT name, id 
     FROM t_sales 
     ) 
0

Проблема - это ваше ГДЕ.

Это не так, как есть. Вы читаете его как «WHERE (имя и id) NOT IN (...)», тогда как он читает его как «WHERE name (не является нулевым) AND (id NOT IN (...))» .. Если вы понимаете, что я имею в виду.

Изменить это: ROW(name, id) NOT IN (SELECT name, id FROM T_sales);

1

Вы пробовали СУЩЕСТВУЕТsyntax?

INSERT INTO sales (name, id) 
SELECT name, id 
FROM sales_h 
WHERE NOT EXISTS (SELECT * FROM T_sales WHERE T_sales.name = sales_h.name AND T_sales.id = sales_h.id); 
1

MySQL позволяет использовать кортеж как переменная:

Это ваше заявление:

INSERT INTO sales (name, id) 
SELECT name, id FROM sales_h 
WHERE name AND id NOT IN (SELECT name, id FROM T_sales); 

Проблема в том, "имя и Id". Включите, что в кортеж:

INSERT INTO sales (name, id) 
SELECT name, id FROM sales_h 
WHERE (name, id) NOT IN (SELECT name, id FROM T_sales); 

Лично мне не нравится это много по двум причинам: кортеж в качестве переменной не работает (или работает по-разному) на других RDBMSes, и IN, как правило, плохо работают в многие ситуации, поэтому мне нравится привыкать не использовать IN.

Как Jhonny-D-Cano-leftware состояний (я upmodded его), я бы использовать, где не существует:

INSERT INTO sales (name, id) 
SELECT name, id FROM sales_h a 
WHERE not exists (
SELECT * 
FROM T_sales b 
where b.id = a.id and b.name = a.name); 
0
INSERT INTO table_name(column1, column2) SELECT "value one", "value two" FROM DUAL 
WHERE NOT EXISTS(
    SELECT column1 FROM table_name 
    WHERE column1 = "value one" 
    AND column2 = "value two" LIMIT 1 
) 
Смежные вопросы