我有两张桌子。 ProductA和ProductB。
产品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
我想编写一个查询,它从ProductB表中输出ProductA Table和SubId列的所有记录,这样如果ProductA中的ID存在于ProductB中,那么它将显示SubId else NULL。因此对于上面的表格,它将显示以下输出。
ID Description SubId
A1 ProdA1 112
B1 ProdB1 111
C1 ProdC1 NULL
D1 ProdD1 117
E1 ProdE1 116
我怎样才能完成这项工作?
答案 0 :(得分:1)
如果ProductA中的ID存在于ProductB中,那么它将显示SubId else NULL
这就是LEFT OUTER JOIN
的目的。否则,您选择ProductB.subId
每ID
的最低值,这意味着aggregate 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
集,而是聚合分组集。
答案 1 :(得分: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