2

これが要件です

以下のような2つのテーブルがあります。OrderListは、スタッフテーブルからの外部キーであるStaffIdが格納された3つのフィールドを含むデータテーブルです。一部のレコードには、このテーブルに値がない場合があることに注意してください。

オーダーリスト

OrderId Marketing_Staff_ID Finance_Staff_Id ManagerId
1       STAFF001           STAFF002         STAFF003
2                          STAFF005         STAFF003
3       STAFF004           STAFF004         STAFF003
4       STAFF001           STAFF002         STAFF003
5       STAFF001                            STAFF007

スタッフ

Staff_Id Staff_Name
STAFF001 Jack C.K.
STAFF002 William. C
STAFF005 Someone

SQLステートメントを記述したいので、OrderListから各レコードのスタッフ名を選択することもできます(スタッフIDのないこれらのレコードの場合、名前フィールドにN / Aを残します)

OrderId Mkt StaffID Name       Finance StaffId  Name      ManagerId, Name
1       STAFF001    Jack C.K.  STAFF002         William.  STAFF003   Chan.Chi

では、どうすればSQLを記述できますか?左参加またはsth?

私は本当にSQLの初心者なので、どうもありがとうございました。

4

1 に答える 1

5

複数の が必要ですLEFT JOIN:

select ol.orderid,
       ol.marketing_staff_id,
       coalesce(ms.staff_name, 'n/a') as marketing_name,
       ol.finance_staff_id,
       coalesce(fi.staff_name, 'n/a') as finance_name
from orderlist as ol
  left join staff as ms on ms.staff_id = ol.marketing_staff_id
  left join staff as fi on fi.staff_id = ol.finance_staff_id

マネージャーの結合を追加するのはあなたに任せます。

上記は ANSI SQL であり、すべての DBMS で機能するはずです。coalesceお使いの DBMS が、単にNULL値を別のものに置き換える機能をサポートしていない可能性がわずかにあります。その場合、DBMS のマニュアルを確認する必要があります。

于 2012-09-26T07:00:15.740 に答える