Sql 非主键上的左连接

Sql 非主键上的左连接,sql,sql-server-2008,Sql,Sql Server 2008,如何在表a和表B上进行左联接,这两个表有一个公共列,但不是a或B的主键 公共列在两个表中可能都有一条或多条记录。我想显示表A中的所有行,并从B中为A中的记录提取额外的数据。这可能吗 表A Column1 1123 1123 1123 2234 2234 3344 表B Column1 1123 2234 2234 2234 2234 期望输出 A.Column1 B.Column1 1123 1123 1123 1123 1123 1123 2234

如何在表a和表B上进行左联接,这两个表有一个公共列,但不是a或B的主键

公共列在两个表中可能都有一条或多条记录。我想显示表A中的所有行,并从B中为A中的记录提取额外的数据。这可能吗

表A

Column1
1123
1123
1123
2234
2234
3344
表B

Column1
1123
2234
2234
2234
2234
期望输出

A.Column1 B.Column1
1123       1123
1123       1123
1123       1123
2234       2234
2234       2234
3344       NULL

您不需要在
连接中有主键列(不过,由于索引的缘故,主键列通常更快)。只需将公共字段用作联接条件:

SELECT a.field, b.field2
FROM a
LEFT JOIN b
  ON b.common = a.common
WHERE a.id = ???

我不确定你描述的场景有什么特别之处。我错过什么了吗

SELECT *
FROM TABLEA TA
LEFT JOIN TABLEB TB ON TA.COMMONFIELD = TB.COMMONFIELD

根据最新的评论和期望的结果,这个查询应该可以工作。 需要从表B中获取不同的值,因为存在重复的值

SELECT A.COLUMN1 , B.Column1
FROM TableA A
LEFT JOIN ( SELECT DISTINCT COLUMN1 FROM TableB ) B
on A.Column1 = B.Column1

是的,左连接应该有效。从A.col=B上的左连接B中选择*。col@RajeshB上具有非主键的A上的左联接输出的记录比表A中的记录多。我是否使用了错误的联接?是否只从B中选取一个值?您能否提供样本数据和预期结果以进行试验?是的,表A中的许多记录中,表B只有一条记录。例如,表A可能有1、2、,ID1122的3条或更多记录,其中表B中只有1条记录ID1122@RADAR我已使用示例数据和所需的outputleft联接在B上的A上进行了更新,非主键输出的记录比表A中的记录多。我是否使用了错误的联接?否,如果表B中的联接条件与表A中特定记录的X匹配,您将获得与表B中每个匹配行联接的表A行的X个副本。如果X=0,您将只获得表B字段为NULL的表A记录-这是外部联接的属性。如果你使用内部连接,在这种情况下,你会得到零行。不知道为什么我会被否决…选民关心解释一下吗?我更新了表B中的样本数据。对于TableA中的记录,TableB中可能有更多的记录。在运行您提供的查询后,它返回的记录比TableA中的记录多。不确定为什么我看到更多的记录。。。你能给我一些建议吗?我检查了TableA中的空值和非数值,还添加了另一个Where子句来删除非数值。。。还是一样result@user793468,您应该可以看到A中的所有记录,而不是更多,您可以创建sql FIDLE来处理所有列数据,因此很容易调试
SELECT A.COLUMN1 , B.Column1
FROM TableA A
LEFT JOIN ( SELECT DISTINCT COLUMN1 FROM TableB ) B
on A.Column1 = B.Column1