gpt4 book ai didi

sql - 如何在多个键上使用反向 JOIN 进行 INSERT?

转载 作者:行者123 更新时间:2023-12-02 05:55:47 26 4
gpt4 key购买 nike

如何对多个键列进行反向连接?

在这个婴儿玩具 SqlServer 示例中,我有以下内容

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')

在数据库的其他地方我有一个类似的表

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'

现在我想在 CarList 表中插入我还没有的汽车

有点像...

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

这不起作用,因为“blue”、“Betty”、“Ford”行将被过滤掉...

如果这只是某种类型的单个 ID,那将非常容易

INSERT INTO myTable (myID, param1, param2, etc)
SELECT param1, param2, etc
FROM someOtherTable new
WHERE new.myID NOT IN (SELECT myID FROM myTable)

由于我不想深入的原因,我无法从 NewCars 中删除与 CarList 匹配的行。如果可能的话,我还需要一次完成此操作。

[编辑]谢谢大家!

最佳答案

感谢 DDL 和 DML

这是一种方法

INSERT INTO CarList ( CarColour, CarName, CarCompany)
SELECT DISTINCT *
FROM NewCars n
where not exists (select 1 from CarList c where c.CarColour =n.CarColour
and c.CarName = n.CarName
and c.CarCompany = n.CarCompany)

至少有 4 种不同的方法可以做到这一点

  • NOT IN(不会像您那样对多于 1 列起作用)
  • 不存在
  • 左连接和右连接
  • 外部应用(2005 年以上)
  • 除了(2005 年以上)

阅读Select all rows from one table that don't exist in another table

关于sql - 如何在多个键上使用反向 JOIN 进行 INSERT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1013257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com