-1

2つのテーブルがあります。ProductAおよびProductB。

ProductA

ID Description

A1 ProdA1
B1 ProdB1
C1 ProdC1
D1 ProdD1
E1 ProdE1

ProductB

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 です。

それがSの目的ですLEFT OUTER JOINProductB.subIdそれ以外の場合は、 perの最小値を選択しており、これはaggregateIDを意味します。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 JOIN2 つのテーブル:

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 に答える