SQL: вставить в table_b, где table_a не имеет связанной строки?

#mysql #sql #insert #mariadb #row

#mysql #sql #вставить #mariadb #строка

Вопрос:

Извините, если подобный вопрос уже существует, я пока не нашел ни одного.

У меня есть две таблицы, products и prices .

В моей products таблице у меня много продуктов (тысячи), но в prices я установил цены только на несколько продуктов.

Вызывается столбец, который их соединяет code (в обеих таблицах).

Мне нужно сделать запрос на ВСТАВКУ, который вставляет по одной строке prices для каждого product , в котором нет строки prices . Как этого добиться?

Комментарии:

1. code Предполагается, что он уникален в prices таблице?

2. @GordonLinoff Нет, это не так! Поскольку статья может иметь более одной цены. Поэтому таблица цен может содержать много строк для одной и той же статьи. Но мне нужно иметь хотя бы одну цену за статью, чтобы начать работать.

3. Интересно. Возможно, вам просто нужно LEFT JOIN где-то?

Ответ №1:

Вы можете использовать INSERT INTO ... SELECT предложение with an EXISTS :

 INSERT INTO prices (code, col1, col2, ...)
SELECT code, col1, col2, ...
FROM products p1
WHERE NOT EXISTS (SELECT 1 FROM prices p2 WHERE p1.code = p2.code);
 

Ответ №2:

Это LEFT JOIN между products и code :

 select p.code, p.column2, p.column3, ...
from products p left join prices pp
on pp.code = p.code
where pp.code is null
 

выберите все строки, из products которых нет соответствующего code in prices .
Итак, вы можете использовать его в этом утверждении:

 insert into prices (code, column2, column3, ...)
select p.code, p.column2, p.column3, ...
from products p left join prices pp
on pp.code = p.code
where pp.code is null