1

以下の次のSQLクエリは、この結果を生成しました

cust table

CUST_ID     AC_NO      NAME            AREA  SALES
---------- ---------- ------------------------- ---
C001       A30045     Smiths Heavy       1   R001
C002       A30145     Heavy jonps        1   R001
C003       A30046     dangote flour      1   R002
C004       A30047     OAU ife            2   R002


Area Table

AREA_NUMBER AREA_NM  AREA_Dp
----------- ---------- ----------
      1 North      Leeds
      2 South      Newcastle
      3 East       Surrey
      4 West       London



Area_geo Table


SALE REPP_   AREAA_ID AREAM AREAMANAGER_NAME
---- ----- ---------- ----- -------------------
SG01 R001           1 R110  mandy Jay
SG02 R002           2 R110  mandy Jay
SG03 R003           3 R111  Kay sole
SG04 R003           3 R111  Kay sole
SG05 R003           3 R111  Kay sole
SG06 R001           4 R110  mandy Jay




  select cust.*,
  area.AREA_Nm,area.AREA_Dp
   from area inner join cust on
   area.area_number=customer.area
   ORDER BY customer.Cust_ID;

結果

 CUST_ID    AC_NO      NAME            ADDRESS         AREA  SALES  AREA_N  AREA_Dp
 ---------- ---------- -------------- ------------------------- ---------- ----- ---
 Ac003       A30046     dangote flour  court Estate     1    R002   North      Leeds
 Ac004       A30047     OAU ife        4 Abanishe       2    R002   South      Newcastle

私の意図は、下の表の上記の結果に Areamanager_name をさらに含めることです。ただし、以下の表には、上記の結果 (Area) に対する共通の属性 (Area_ID) があります。

テーブル エリア_ジオ

SALE REPP_   AREA_ID  AREAM   AREAMANAGER_NAME
---- ----- ---------- ----- ----------------
SG01 R001        1    R110    mandy Jay
SG02 R002        2    R110    mandy Jay
SG03 R003        3    R111    Kay sole
SG04 R003        3    R111    Kay sole
SG05 R003        3    R111    Kay sole
SG06 R001        4    R110    mandy Jay

期待される結果

 CUST_ID    AC_NO      NAME            ADDRESS         AREA  SALES  AREA_N   AREA_dp Areamanager
 ---------- ---------- -------------- ------------------------- ---------- ----- ---
 Ac003       A30046     dangote flour  court Estate     1    R002   North    Leeds     mandy Jay
 Ac004       A30047     OAU ife        4 Abanishe       2    R002   South    Newcastle mandy Jay
4

3 に答える 3

0
select cust.*, area.AREA_Nm,area.AREA_Dp
from area inner join cust on area.area_number=customer.area
          inner join Area_Geo on cust.area = Area_Geo.area
ORDER BY customer.Cust_ID;
于 2012-11-14T19:14:28.337 に答える
0

以下でうまくいくと思いますが、少し読みやすくするために少し再フォーマットしました。エリアマネージャーがいない場合は、外部結合が必要になります。

SELECT cust.*
      ,area.area_Nm
      ,area.AREA_Dp
      ,area_geo.Areamanager_name
FROM area inner join cust     on area.area_number = customer.area
          inner join area_geo on area.area_number = area_geo.area_id
ORDER BY customer.Cust_ID;

コメントに応じて編集:-

二重値の問題は、area_geoテーブルがarea_idの重複値を持つ可能性がある(area_id 3の場合は)重複する可能性があるという事実によって引き起こされます。結合を行うと、テーブル内の各行に対して1つの行が返されるため、area_idの場合は毎回3つの行が返されます。サブクエリを使用できます

SELECT cust.*
      ,area.area_Nm
      ,area.AREA_Dp
      ,(SELECT DISTINCT area_geo.Areamanager_name
        FROM   area_geo
        where  area.area_number = area_geo.area_id) Areamanager_name
FROM area inner join cust     on area.area_number = customer.area
ORDER BY customer.Cust_ID;

ただし、同じarea_idに対してAreamanager_nameの値が異なる場合、このクエリは失敗します。理想的には、areamanager_nameを取得するには、より適切なテーブルを使用する必要があると思います。データベースがない場合は、area_geoに各area_idのレコードが1つだけになるようにデータベースを正規化します。

于 2012-11-14T19:14:39.870 に答える
0

を使用する必要がありますLEFT OUTER JOINhttp://en.wikipedia.org/wiki/Join_%28SQL%29

于 2012-11-14T18:58:02.707 に答える