-1

我有两张桌子。产品 A 和产品 B。

产品A

ID Description

A1 ProdA1
B1 ProdB1
C1 ProdC1
D1 ProdD1
E1 ProdE1

产品B

ID SubId

A1 112
A1 118
B1 111
B1 113
D1 117
D1 118
E1 115
E1 116
E1 117

我想编写一个查询,它输出 ProductA 表中的所有记录和 ProductB 表中的 SubId 列,这样如果 ProductA 中的 ID 存在于 ProductB 中,那么它将显示 SubId 否则为 NULL。因此对于上述表格,它将显示以下输出。

ID Description SubId

A1  ProdA1      112
B1  ProdB1      111
C1  ProdC1      NULL
D1  ProdD1      117
E1  ProdE1      116

我怎样才能完成这项工作?

4

2 回答 2

1

如果 ProductA 中的 ID 存在于 ProductB 中,那么它将显示 SubId 否则为 NULL

这就是LEFT OUTER JOINs 的目的。否则,您将为ProductB.subIdper选择最低值ID,这意味着聚合MIN()

SELECT
  ProductA.ID,
  ProductA.Description,
  /* Aggregate MIN() to get the first SubId per Id */
  MIN(ProductB.SubId) AS SubId
FROM
  ProductA
  LEFT OUTER JOIN ProductB ON ProductA.ID = ProductB.ID
GROUP BY
  ProductA.ID,
  ProductA.Description

因此,您根据样本输出寻找的并不是一个DISTINCT集合,而是一个聚合分组集合。

这是 SQLFiddle.com 上的演示

于 2012-11-30T19:20:01.073 回答
0

LEFT JOIN两张表:

SELECT a.Id, a.description, b.subId
FROM ProductA a
LEFT JOIN
(
  SELECT Id, MIN(subId) subid
  FROM ProductB
  GROUP BY ID
)b ON a.Id = b.Id

SQL 小提琴演示

于 2012-11-30T19:20:01.487 回答