左连接非主键

时间:2014-10-10 21:15:55

标签: 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       2234
2234       2234
3344       NULL

4 个答案:

答案 0 :(得分:1)

根据最新评论和期望的结果,此查询应该有效。 需要从TableB获取不同的值,因为存在重复值。

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

答案 1 :(得分:0)

您不需要在JOIN中拥有主键列(但是,由于索引,它通常更快)。只需使用您的公共字段作为加入条件:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

select * from A
left outer join B on A.a = B.b