【问题标题】:SQL Insert into a table FROM 2 unrelated tables and NOT ExistsSQL 从 2 个不相关的表中插入一个表并且不存在
【发布时间】:2019-12-29 05:49:43
【问题描述】:

我可以运行下一个 sql 脚本一次,使用来自 2 个不相关表的信息插入一些行:

INSERT INTO CompanyCarType (Name, CompanyId, LastModDateTime, LastModUserId)
    SELECT T.Name,  C.Id , GETDATE() LastModDateTime, C.LastModUserId
    FROM CarType T 
    CROSS JOIN Company C

但是,我需要能够多次运行此脚本而不插入重复项,或者在我的情况下失败,因为该表不允许重复 CompanyIdName

所以我尝试使用WHERE NOT EXISTS,但是由于SELECT语句中有2个表,我不能使用别名来引用它,并且语法不正确。

INSERT INTO CompanyCarType (Name, CompanyId, LastModDateTime, LastModUserId)
    SELECT T.Name,  C.Id , GETDATE() LastModDateTime, C.LastModUserId
    FROM CarType T 
    CROSS JOIN Company C)  AS T1
    WHERE NOT EXISTS (SELECT Name
                      FROM CompanyCarType T2
                      WHERE T2.Name = T1.Name)

在 SELECT 子句中使用一个表的例子很多,但没有一个使用 2 个或更多表的例子。

谢谢!

【问题讨论】:

    标签: sql-server sql-insert not-exists


    【解决方案1】:

    您可以在插入时使用行号,然后在 where not exists 子句中添加公司 ID。

    INSERT INTO CompanyCarType 
    (Name, CompanyId, LastModDateTime, LastModUserId)
    SELECT T.Name,  C.Id , GETDATE() LastModDateTime, C.LastModUserId, ROW_NUMBER() over (partition by t.name, c.ID order by LastModDateTime) rownum 
    FROM CarType T CROSS JOIN Company C)  as T1
    WHERE t1.rownum = 1 and  NOT EXISTS(SELECT Name
                        FROM CompanyCarType T2
                       WHERE T2.Name = T1.Name and t2.CompanyId = t1.ID)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      相关资源
      最近更新 更多