Dostępne są 2 tabele. Pierwszy ma fname
(imię), lname
(nazwisko), a drugi ma wiele kolumn, w tym: salutation
(Pan, Dr itp.), fname
(imię), mname
(drugie imię), lname
(nazwisko), unikalnyidentyfikator i datę.Serwer SQL 2014 Insert IN NOT IN
Chciałbym utworzyć trzecią tabelę zawierającą Salutation
, fname
, mname
, lname
, uid
, added
od informacji zawartych w pozostałych 2 stoły potem spadnie pierwszej tabeli i ponownie utworzyć drugą tabelę Usunięcie tych kolumn.
To jest to, co mam:
CREATE TABLE MyTable
(
Id int IDENTITY (1, 1) PRIMARY KEY,
Salutation varchar(20) NULL DEFAULT (NULL),
Fname varchar(30) NOT NULL,
Mname varchar(30) NULL DEFAULT (NULL),
Lname varchar(30) NOT NULL,
Uid uniqueidentifier NULL DEFAULT (NULL),
Added Date NOT NULL DEFAULT (getdate())
);
INSERT INTO MyTable (Fname, LName)
SELECT Fname, Lname
FROM TABLE1
To gdzie ja mylić:
INSERT INTO MyTable (Salutation, Fname, Mname, LName, Uid, Added)
SELECT
Salutation, Fname, Mname, LName, Uid, Added
FROM
Table2
WHERE
Fname, Lname NOT IN (SELECT Fname, Lname FROM Table1)
Czy ktoś mógłby poprawić ostatni INSERT
oświadczenie, że tak to działa?
- nie lubi
Fname, Lname
z prawej stronyWHERE
słowa - powinienem wstawić z drugiej tabeli pierwszej następnie od pierwszego?
Stwierdzam, że takie podejście pomija ponad 1000 rekordów. Nadal gram z twoją sugestią, ale bez powodzenia. Zauważyłem, że Table2 ma wartość fname w niektórych wierszach, ale nie ma innej nazwy, więc nie chcę jej dodawać.Jeśli ma nazwę fname, lname dodaj ją, jeśli ma zwrot grzecznościowy i lname to ją uwzględni, jeśli dowolny wiersz ma tylko jeden z pozdrowień lub nazwy pozostawiając pozostałe 3 pola nazw za darmo, nie chcę tego wyniku dodanego. Posiadanie tego małego pola tekstowego do odpowiedzi również nie jest zbyt pomocne. –
@EssexMale: Zaktualizowałem swoją odpowiedź, jednak nie wydaje mi się, aby było to w 100% to, czego szukasz, więc myślę, że powinieneś zaktualizować swój pierwotny post z nieco większym opracowaniem i wyraźniejszym określeniem stanu. – potashin