【问题标题】:sql issue to query product name查询产品名称的sql问题
【发布时间】:2013-01-27 09:17:22
【问题描述】:

我是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

表:ORDERLINKPRODUCTS:

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

我正在尝试创建一个显示订单所有产品名称的选择语句。例如显示orderid=1 的所有产品名称,这将返回spoon,soap。

有什么建议吗?

提前致谢。

【问题讨论】:

    标签: sql join oracle10g


    【解决方案1】:

    您应该在SQL 中使用JOIN 关键字来连接三个表,以便能够访问PRODUCTNAME 并显示该表数据。更多关于Join clause

    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 Demo

    【讨论】:

    • @user1999453 - 很高兴为您提供帮助。
    【解决方案2】:

    您可以使用此功能查找产品不合格的订单

    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 FIDDLE DEMO

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多