Sql server 如何使用内部联接和左外部联接联接两个表

Sql server 如何使用内部联接和左外部联接联接两个表,sql-server,Sql Server,我在MSSQL中有两个具有相同结构T1和T2的表。两个表都可以在Id上进行内部联接,但T2可能不包含与T1中的Id关联的AccountId。 下面是我尝试过的代码,但结果不起作用?。 预期的结果是将不在T1中的值插入T3中您需要的where子句: INSERT INTO T3(Id, AccountId, Name) SELECT T1.Id, T1.AccountId, T1.Name FROM T1 LEFT JOIN T2 ON T2

我在MSSQL中有两个具有相同结构T1和T2的表。两个表都可以在Id上进行内部联接,但T2可能不包含与T1中的Id关联的AccountId。

下面是我尝试过的代码,但结果不起作用?。


预期的结果是将不在T1中的值插入T3中

您需要的
where
子句:

INSERT INTO T3(Id, AccountId, Name)
    SELECT T1.Id, T1.AccountId, T1.Name
    FROM T1 LEFT JOIN
         T2
         ON T2.Id = T1.id
    WHERE T2.AccountId IS NOT NULL;
注:

  • 只需要一个
    左连接
    。我不知道
    内部连接的作用是什么
  • 每个
    JOIN
    后面都应该跟一个
    ON
    子句
  • 在执行
    插入操作时,应列出列
  • 您需要
    WHERE
    来查找不匹配项
  • 也可以使用
    不存在
    编写此查询

您需要
where
条款:

INSERT INTO T3(Id, AccountId, Name)
    SELECT T1.Id, T1.AccountId, T1.Name
    FROM T1 LEFT JOIN
         T2
         ON T2.Id = T1.id
    WHERE T2.AccountId IS NOT NULL;
注:

  • 只需要一个
    左连接
    。我不知道
    内部连接的作用是什么
  • 每个
    JOIN
    后面都应该跟一个
    ON
    子句
  • 在执行
    插入操作时,应列出列
  • 您需要
    WHERE
    来查找不匹配项
  • 也可以使用
    不存在
    编写此查询

这应该是你想要的:

CREATE TABLE #T1 (id int, AccountId int, [Name] varchar(6));
CREATE TABLE #T2 (id int, AccountId int, [Name] varchar(6));
CREATE TABLE #T3 (id int, AccountId int, [Name] varchar(6));
INSERT INTO #T1
VALUES (111,5555,'John  '),
       (122,5555,'David '),
       (133,5555,'Sharon');
INSERT INTO #T2
VALUES (111,5555,'John  '),
       (133,5555,'Sharon');

INSERT INTO #T3 (id, AccountId, [Name])
SELECT T1.id,
       T1.AccountId,
       T1.[Name]
FROM #T1 T1
     LEFT JOIN #T2 T2 ON T1.ID = T2.id
WHERE T2.id IS NULL;

SELECT *
FROM #t3;

DROP TABLE #T1;
DROP TABLE #T2;
DROP TABLE #T3;

这应该是你想要的:

CREATE TABLE #T1 (id int, AccountId int, [Name] varchar(6));
CREATE TABLE #T2 (id int, AccountId int, [Name] varchar(6));
CREATE TABLE #T3 (id int, AccountId int, [Name] varchar(6));
INSERT INTO #T1
VALUES (111,5555,'John  '),
       (122,5555,'David '),
       (133,5555,'Sharon');
INSERT INTO #T2
VALUES (111,5555,'John  '),
       (133,5555,'Sharon');

INSERT INTO #T3 (id, AccountId, [Name])
SELECT T1.id,
       T1.AccountId,
       T1.[Name]
FROM #T1 T1
     LEFT JOIN #T2 T2 ON T1.ID = T2.id
WHERE T2.id IS NULL;

SELECT *
FROM #t3;

DROP TABLE #T1;
DROP TABLE #T2;
DROP TABLE #T3;

听起来你希望T2包含T2中当前的内容和T1中的内容的并集?如果是这样,您可以考虑使用EXCEPT计算集合差异并插入这些行。您可以为预期的结果设置一个屏幕截图吗?听起来您希望T2包含当前在T2中的内容和T1中的内容的并集?如果是这样,您可以考虑使用EXCEPT计算集合差异并插入这些行。您可以为预期结果设置屏幕截图吗?