0

私は を初めて使用しSQLます。オンライン リソースを探していますが、問題を解決するものはまだ見つかりません。基本的に私は以下の3つのテーブルを持っています:

 ORDERTBL(ORDERID,ORDERDATE,ORDERSTATUS),
 PRODUCT(PRODUCTID,PRODUCT_NAME),
 ORDERLINKPRODUCTS(ORDERID,PRODUCTID,QUANTITY,ORDERLINKPRODUCTID)

product nameすべての注文が含まれているため、クエリを実行する必要がある特定の注文の製品テーブルからすべてを取得したいと考えてORDERLINKPRODUCTSいます。

たとえば、3 つのテーブルで利用可能なテスト データを見つけてください。

テーブル ORDERTBL:

ORDERID=1,ORDERDATE= 24May, ORDERSTATUS=Process

テーブル製品:

    PRODUCID =1  PRODUCT_NAME = spoon    PRODUCID =2  PRODUCT_NAME = soap

表 :ORDERLINKPRODUCTS:

ORDERID=1 PRODUCTID = 1 QUANTITY=3  ORDERLINKPRODUCTID=1    ORDERID=1 PRODUCTID = 2 QUANTITY=1  ORDERLINKPRODUCTID=2

注文のすべての製品名を表示する select ステートメントを作成しようとしています。たとえばorderid=1、spoon,soap を返すすべての製品名を表示します。

それを行う方法について何か提案はありますか?

前もって感謝します。

4

2 に答える 2

2

JOINキーワード inを使用して 3 つのテーブルを結合し、そのテーブル データSQLにアクセスして表示できるようにする必要があります。Join 句PRODUCTNAMEの詳細

SELECT prod.PRODUCT_NAME 
            FROM ORDERTBL ord 
            INNER JOIN ORDERLINKPRODUCTS link ON ord.ORDERID = link.ORDERID
            INNER JOIN PRODUCT prod ON link.PRODUCTID = prod.PRODUCTID  
            WHERE ord.ORDERID = 1

SQLfiddle デモ

于 2013-01-27T09:25:07.160 に答える
1

これを使用して、リストされた製品の注文を見つけることができます

SELECT O.ORDERID, RTRIM(
            XMLAGG(XMLELEMENT(e, P.PRODUCT_NAME ||',') ORDER BY O.ORDERID).EXTRACT('//text()'), ',') as Products
FROM ORDERTBL O 
  INNER JOIN ORDERLINKPRODUCTS L
    ON O.ORDERID = L.ORDERID
  INNER JOIN PRODUCT P
    ON L.PRODUCTID = P.PRODUCTID  
GROUP BY O.ORDERID

これを使用して数量とともにリストされた製品:

SELECT O.ORDERID, RTRIM(
            XMLAGG(XMLELEMENT(e, P.PRODUCT_NAME || '(' || L.QUANTITY || '),') ORDER BY O.ORDERID).EXTRACT('//text()'), ',') as Products
FROM ORDERTBL O 
  INNER JOIN ORDERLINKPRODUCTS L
    ON O.ORDERID = L.ORDERID
  INNER JOIN PRODUCT P
    ON L.PRODUCTID = P.PRODUCTID  
GROUP BY O.ORDERID

WHERE clauseフィルタリングされた注文には、必要に応じて句を追加できます。

SQL フィドルのデモ

于 2013-01-27T10:12:48.723 に答える