#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