Как вставить значения в таблицу на основе значений в другой таблице - PullRequest
0 голосов
/ 26 апреля 2019

Мне нужно вставить дополнительные записи в одну таблицу для всех записей в другой таблице, где определенное условие не выполняется, а именно, они еще не существуют в таблице.

У меня есть 3 таблицы, одна называется ARTICLES и имеет столбцы (ArtNr, ArtName), вторая таблица называется CUSTOMERS со столбцами (CustNr, CustName,CustAddress) Третья таблица CUSTARTLINK является связующим звеном между таблицами Customer и Article и имеет запись для каждого Customer и всех статей, которые он имеет.Таким образом, у него есть столбцы (CustNt, ArtNr).

Таким образом, в приложении, когда выбран клиент, будут показаны только те статьи, которые имеют ссылку на клиента в таблице.

Вся эта функциональность работает, включая добавление и удаление статей и клиентов в соотв.таблицы и добавление статей клиентам (создание записей в таблице CUSTARTLINK.

Я хочу добавить функциональность, позволяющую выбрать одну статью из таблицы статей и добавить ее ко ВСЕМ клиентам, существующим в ЗАКАЗЧИКАХtable (поэтому создание новых записей в таблице CUSTARTLINK, если они еще не существуют.

Я пытался создать это с помощью команды INSERT в сочетании с условием WHERE, но я не приближаюсь кчего я хочу достичь.

Может кто-нибудь перечислить команды SQL для достижения этого?

Ответы [ 2 ]

1 голос
/ 26 апреля 2019
INSERT INTO CUSTARTLINK (CustNt, ArtNr)
(SELECT CustNr, X from CUSTOMERS)

Заменить X идентификатором артикула

0 голосов
/ 26 апреля 2019

Предположим, что вы хотите вставить artnr = 11 для всех клиентов:

insert into custartlink (custnr, artnr)
select c.custnr, 11
from customers c 
where not exists (
  select 1 from custartlink 
  where custnr = c.custnr and artnr = 11
)

Условие where not exists... гарантирует, что не будет дубликатов после выполнения оператора или если он уже существуетограничение в таблице custartlink, что при попытке нарушить ограничение не будет ошибок.То же самое может быть достигнуто с помощью except:

insert into custartlink (custnr, artnr)
select custnr, 11
from customers
except
select custnr, 11
from custartlink
where artnr = 11

Если у вас есть название статьи, например 'art11', и вы хотите использовать это, а не artnr, тогда вы можете сделать это:

insert into custartlink (custnr, artnr)
select 
  c.custnr, 
  (select artnr from articles where artname = 'art11')
from customers c
where not exists (
  select 1 from custartlink 
  where 
    custnr = c.custnr 
    and 
    artnr = (select artnr from articles where artname = 'art11')
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...