Comment faire une jointure inverse avec plusieurs colonnes clés?Comment INSÉRER en utilisant une JOIN jointe sur plusieurs clés?
Je les suivantes
CREATE TABLE [dbo].[CarList](
[myID] [int] IDENTITY(1,1) NOT NULL,
[CarColour] [varchar](32) NOT NULL,
[CarName] [varchar](128) NOT NULL,
[CarCompany] [varchar](32) NOT NULL,
CONSTRAINT [PK_CarList] PRIMARY KEY CLUSTERED(
[myID] ASC,
[CarColour] ASC,
[CarName] ASC,
[CarCompany] ASC
)
)
GO
INSERT INTO CarList (CarColour, CarName, CarCompany)
VALUES('blue', 'Abe', 'Ford')
Ailleurs dans le DB je Dans ce bébé-jouet exemple SqlServer, une table comme
CREATE TABLE [dbo].[NewCars](
[CarColour] [varchar](32) NOT NULL,
[CarName] [varchar](128) NOT NULL,
[CarCompany] [varchar](32) NOT NULL,
)
GO
INSERT INTO NewCars (CarColour, CarName, CarCompany)
SELECT 'blue', 'Abe', 'Ford'
UNION ALL
SELECT 'blue', 'Abe', 'GM'
UNION ALL
SELECT 'blue', 'Betty', 'Ford'
UNION ALL
SELECT 'green', 'Abe', 'Honda'
Maintenant, je veux insérer les voitures, je ne suis pas déjà ont dans le tableau carliste
Quelque chose comme ...
INSERT INTO CarList (CarColour, CarName, CarCompany)
SELECT DISTINCT new.CarColour, new.CarName, new.CarCompany
FROM NewCars new, CarList old
WHERE new.CarColour <> old.CarColour
AND new.CarName <> old.CarName
AND new.CarCompany <> old.CarCompany
Ce qui ne fonctionne pas parce que le « bleu », « Betty », « ligne Ford » va se filtré ...
Si cela était juste un seul identifiant de quelque sorte que ce serait vraiment facile
Pour des raisons que je ne veux pas vraiment aborder, je ne peux pas supprimer des lignes de NewCars qui correspondent à CarList. J'ai aussi besoin de le faire en un seul passage si possible.
[edit] Merci les gars!
NOT IN ne travailler sur plusieurs colonnes dans SQL Server, n'est-ce pas? – Quassnoi
+1: réponse très complète. Agréable. – RBarryYoung
vous auriez besoin d'un tas d'ANDs mais ce serait inefficace. – SQLMenace