#c# #sql
#c# #sql
Вопрос:
У меня есть 3 таблицы:
Таблица 1
CustomerID Name Sname Zipcode
1 test1 test1 xxx2
2 test2 test2 yyy2
3 test3 test3 xxx2
Таблица 2
StaffID Name sname
1 Jack Mack
2 Jhon Addison
Таблица 3
ID CustomerID StaffID
Я не уверен, что SQL может это сделать, поэтому в C # я хочу, чтобы если StaffID 2 отсутствует в таблице 3, и если персонал хочет посетить всех клиентов в почтовом индексе xx2, то, нажав на кнопку посещения, он должен быть вставлен для всего почтового индекса. Итак, если я выбираю почтовый индекс xxx2, тогда запрос должен сначала проверить, не посещаю ли я тот же почтовый индекс для определенного, если нет, то добавьте человека в таблицу 3, чтобы обновленная таблица 3 выглядела примерно так:
1 1 1
ID CustomerID StaffID
Как вы можете видеть, StaffID 2 хотел бы посетить почтовый индекс xxx2, в результате он получает 2 записи в таблицу 3, потому что есть два CustomerID с почтовым индексом, таким же, как xxx2.
1 1 1
2 1 2
3 3 2
Я провел некоторое онлайн-исследование, я бы сделал это IF EXISTS (SELECT
, но он просто добавил одну запись. Также, я думаю, я буду ожидать 3 параметра от C # zipcode, CustomerID и StaffID
Комментарии:
1. Должна ли таблица 3 сохраняться или вам нужен запрос, который выдаст таблицу 3 в качестве результата, но она никогда не будет сохранена в базе данных? Также я думаю, что понимаю, чего вы хотите, но я не понимаю требования » если StaffID 2 отсутствует в таблице 3 «.
2. @ScottChamberlain Таблица 3 есть, поэтому она проверит почтовый индекс из table1 и вставит результаты в table3. В таблице 3 есть FK от StaffID (table3) до StaffID (таблица 2) и от Customer (table3) до CustomerID (table1), поэтому, если StaffID2 уже посещает CustomerID 2, тогда нет смысла иметь для него другую запись в таблице 3
Ответ №1:
Из вашего описания видно, что вам просто нужен простой оператор insert.
INSERT INTO Table3 (CustomerID, StaffID)
select CustomerID, @StaffId from Table1
where Zipcode = @zipcode
and NOT EXISTS(select StaffID from Table3 where StaffID = @staffId)
Комментарии:
1. требуется ли мне ВСТАВИТЬ В таблицу 3 (CustomerID, StaffID) значения (@CustomerID, @SaffID), потому что это будет предоставлено пользователем C #. И будет ли это автоматически добавлять идентификатор StaffID ко всему почтовому индексу?
2. Нет, вы используете это вместо этого вызова. ВСТАВКА В может либо использовать
values
и добавлять одну строку информации, либо вы можете связать ее сselect
инструкцией, как я сделал.
Ответ №2:
Попробуйте выполнить этот sql-запрос, предполагая, что вы передаете @StaffID, @CustomerID и @Zip в качестве параметров
INSERT INTO Table3 (CustomerID, StaffID)
SELECT CustomerID, @StaffId FROM Table1
WHERE Zipcode = @zip
AND NOT EXISTS(SELECT StaffID FROM Table3 WHERE StaffID = @staffId
AND CustomerID = @CustomerId)