2017-08-08 55 views
0

我有这个疑问,做工精细:加入,由两个小组模式

select 
    order_details.productid, 
    count(*) 
from order_details 
left join orders 
    on order_details.orderid = orders.orderid 
group by order_details.productid; 

的事情是我真的不想要得到的“产品ID”,但“产品名称”。

“productname”处于不同的模式:adm。

那么我怎样才能得到这样的结果呢?

PRODUCTNAME COUNT(*) 
---------- ---------- 
     table   5 
     desk   7 
     lamp   4 

回答

0

“其他模式”你是指另一个表或真正的另一个模式?如果它是另一个模式,只需要一个数据库链接,如果两个模式位于单独的数据库中,或者如果在同一个数据库中,则只需一个允许您从两个模式中进行选择的授予。

不知道更多的细节,好像要做到这一点:

SELECT adm.some_product_table.productname, count(*) 
FROM order_details LEFT JOIN orders on order_details.orderid = orders.orderid 
LEFT JOIN adm.some_product_table on adm.some_product_table.productid = order_details.productid 
GROUP BY order_details.productid; 
+0

谢谢你的解决方案! 这两个模式在同一个数据库中,权限都可以。 该组应该跟随adm.some_product_table.productname – STO

0

您需要另一个join。但是,您需要知道包含产品名称和加入列的表格。

喜欢的东西:

select p.productname, count(*) 
from order_details od join 
    adm.products p     -- guessing at the name 
    on od.productid = p.productid -- and the column for joining 
group by p.productname; 

我猜你不需要orders表中的所有查询。如果您的数据库设置正确,所有订单详细信息都应该只是一个订单的一部分。

+0

嗨,我只是好奇,将这个查询的工作? 选择products.ProductName,COUNT(*)FROM产品哪里的productid在( 选择OrderDetails.productid 从订单明细左 通过OrderDetails.productid 加入上OrderDetails.orderid = orders.orderid 组订单)由产品名称基团; – sourabh1024

+0

它会“工作”,但可能会为每个产品返回“1”。 –

+0

订单表是以后需要的条件。对不起,如果它是误导。 – STO

0
connect adm/pwd1; 
grant select on products to this_schema; 
connect this_schema/pwd2; 
select p.productname, count(*) 
    from order_details d,orders o, adm.products p 
where d.orderid = o.orderid 
    and d.productid = p.productid 
group by p.productname; 
+0

尽管此代码可能会解决问题,但一个好的答案应该总是包含一个解释。 – BDL