0

我是新手SQL,我一直在寻找在线资源,但还没有找到任何东西可以解决我的问题。基本上我有下面三个表:

 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

表:ORDERLINK产品:

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

我正在尝试制作一个显示订单所有产品名称的选择语句。例如显示所有orderid=1将返回勺子、肥皂的产品名称。

有什么建议吗?

提前致谢。

4

2 回答 2

2

您应该使用JOIN关键字 inSQL来连接三个表,以便能够访问PRODUCTNAME和显示该表数据。更多关于Join 子句

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

您可以使用此功能查找产品 ilsted 的订单

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 回答