-1

以下は、私のデータベースのスキーマです。クエリに取り組んでいますが、正しい結果を得ることができません。

TABLE: CUSTOMERINFORMATION  
FIELDS: CUSTID, ACTOPTIONID,VAT,MINIMUMDOCT 

TABLE: ONLINEORDERS 
FIELDS: CUSTID, TOTALQUANTITY 

TABLE: OFFLINEORDERS
FIELDS: CUSTID, TOTALQUANTITY 

TABLE: ACTOPTS 
FIELDS: ACTOPTIONID,ACTNAME 

次のような出力: 一時テーブル: CUSTID、ACTOPTIONID、TOTALONLINEQ、TOTALOFFLINEQ、ACTNAME

上記のすべてのテーブルと前述のフィールドを 1 つのテーブルに結合する必要があります。また、NULL 行が返されるようにする必要もあります。上記すべての UNION ALL を意味します。

これは、上記のすべてが別のテーブルにエクスポートされるデータ エクスポート ユーティリティを作成することです。ただし、他のテーブルと一致するレコードがテーブルにない場合でも、レコードが除外されないようにする必要があります。

編集済み

以下は私の質問です:

SELECT table1.*, table2.*, table3.*
  FROM (SELECT ao.actname,
               ci.custid,
               ci.actoptionid,
               ci.minimumdoct,
               ci.vat
          FROM customerinformation ci, actoptions ao
         WHERE ci.actoptionid = ao.actoptionid) table1
       LEFT JOIN (SELECT custid, totalquantity, FROM onlineorders) table2
          ON table1.custid = table2.custid
       LEFT JOIN (SELECT custid FROM offlineorders) table3
          ON table2.custid = table3.custid

ただし、上記は RIGHT のテーブルから行を返しません。テーブルから右側の行を返したいのですが、そのためには、これらすべてで UNION ALL を使用する必要があると思います。それ、どうやったら出来るの?

4

4 に答える 4

1
SELECT
*
FROM
`CUSTOMERINFORMATION`
LEFT OUTER JOIN
`ONLINEORDERS` ON (`CUSTID`)
LEFT OUTER JOIN
`OFFLINEORDERS` ON (`CUSTID`)
LEFT OUTER JOIN
`OFFLINEORDERS` ON (`ACTOPTS`)
于 2012-12-25T15:33:09.017 に答える
0

これが欲しかったの?

    SELECT CI.CUSTID,
          CI.VAT,
          CI.MINIMUMDOCT,
          ONL.TOTALQUANTITY as ONLINE_TOTALQUANTITY,
          OFF.TOTALQUANTITY as OFFLINE_TOTALQUANTITY,
          A.ACTNAME 
   FROM CUSTOMERINFORMATION CI
        LEFT JOIN ACTOPTS A
          ON CI.ACTOPTIONID = A.ACTOPTIONID
        LEFT JOIN ONLINEORDERS ONL
          ON CI.CUSTID = ONL.CUSTID
        LEFT JOIN OFFLINEORDERS OFF
          ON CI.CUSTID = OFF.CUSTID
于 2012-12-25T15:26:41.463 に答える
0

ORテーブルFULL JOINのいずれかで一致が必要な場合は、a を使用してみてくださいLEFTRIGHT

補足として、このUNIONコマンドは 2 つのSELECTステートメントを結合しますが、これは現在のフォームにはありません。使用したい場合UNIONは、ステートメントを次のように並べ替える必要がありますSELECT ... UNION SELECT ...

于 2012-12-25T16:22:50.020 に答える
0

これを試して:

SELECT CI.CUSTID, CI.ACTOPTIONID, O.TOTALQUANTITY TOTALONLINEQ, 
       O1.TOTALQUANTITY TOTALOFFLINEQ, A.ACTNAME, 
       (O.TOTALQUANTITY + O1.TOTALQUANTITY) TotalQuantity  
FROM CUSTOMERINFORMATION CI 
INNER JOIN ACTOPTS A ON CI.ACTOPTIONID = A.ACTOPTIONID
LEFT JOIN (SELECT * FROM (SELECT CUSTID, TOTALQUANTITY FROM ONLINEORDERS ORDER BY DATE DESC) ASs A GROUP BY CUSTID) O ON CI.CUSTID = O.CUSTID 
LEFT JOIN (SELECT * FROM (SELECT CUSTID, TOTALQUANTITY FROM OFFLINEORDERS ORDER BY DATE DESC) ASs A GROUP BY CUSTID) O1 ON CI.CUSTID = O1.CUSTID;
于 2012-12-25T15:36:58.143 に答える