Вопрос:

Как вставить значения в таблицу на основе значений в другой таблице

sqlite sqlite3

11 просмотра

2 ответа

1 Репутация автора

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

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

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

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

Я хочу добавить функциональность, с помощью которой я могу выбрать один Articel из таблицы Article и добавить его ко ВСЕМ клиентам, существующим в таблице CUSTOMERS (таким образом, создавая новые записи в таблице CUSTARTLINK, если они еще не существуют.

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

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

Автор: Evs Источник Размещён: 25.04.2019 09:11

Ответы (2)


0 плюса

22516 Репутация автора

Предположим, что вы хотите вставить 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'и вы хотите использовать это, а не the 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')
)
Автор: forpas Размещён: 25.04.2019 09:29

0 плюса

756 Репутация автора

INSERT INTO CUSTARTLINK (CustNt, ArtNr)
(SELECT CustNr, X from CUSTOMERS)

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

Автор: Daniel M Размещён: 25.04.2019 09:30
Вопросы из категории :
32x32