如何在sql中使用来自三个表的子查询

如何在sql中使用来自三个表的子查询,sql,oracle11g,Sql,Oracle11g,我有三张桌子,像: 客户表 订单表 orderitems表 我的问题是:如何打印订购数量超过1件的客户姓名 我的sql查询如下所示: SELECT c.firstname, c.lastname FROM customers c WHERE (SELECT o.quantity FROM orderitems WHERE o.quantity > 1) 上述查询中的错误是什么?应该这样做: select c.firstname, c.lastname from customer c

我有三张桌子,像:

客户表

订单表

orderitems表

我的问题是:如何打印订购数量超过1件的客户姓名

我的sql查询如下所示:

SELECT c.firstname, c.lastname
FROM customers c
WHERE (SELECT o.quantity FROM orderitems WHERE o.quantity > 1) 
上述查询中的错误是什么?

应该这样做:

select c.firstname, c.lastname
from customer c
    join orders o on c.customer# = o.customer#
    join orderitems oi on o.order# = oi.order#
group by c.firstname, c.lastname
having sum(oi.quantity) > 1
按如下方式操作:

select c.firstname, c.lastname
from customers c
join orders on c.CUSTOMER#=orders.CUSTOMER#
join orderitems on orders.ORDER#=orderitems.ORDER#
group by c.firstname, c.lastname
having sum(orderitems.quantity)>1
select c.firstname, c.lastname
from customers c
where 1 < (
            select sum(quantity) from orderitems where ORDER# in 
                (
                    select ORDER# from orders where CUSTOMER# = c.CUSTOMER#
                ) 
            group by ORDER#)
您可以在不加入的情况下完成此操作,如下所示:

select c.firstname, c.lastname
from customers c
join orders on c.CUSTOMER#=orders.CUSTOMER#
join orderitems on orders.ORDER#=orderitems.ORDER#
group by c.firstname, c.lastname
having sum(orderitems.quantity)>1
select c.firstname, c.lastname
from customers c
where 1 < (
            select sum(quantity) from orderitems where ORDER# in 
                (
                    select ORDER# from orders where CUSTOMER# = c.CUSTOMER#
                ) 
            group by ORDER#)

我想这会帮助你解决你的问题

你应该使用两个条件来满足订购超过1件物品以及数量超过1件物品的条件


您的查询中有两个错误:

你不是在比较什么

查询结果是数量大于1的行。所以你可能会

where (2
       3
       4) 
你可以清楚地看到,这毫无意义

2您的子查询与有问题的客户记录无关

它只是寻找大量的订单,而不管是哪个客户

数量大于1的orderitems的解决方案

现在还不清楚您是否想要这个,或者您是否想要查看金额,以及这些金额是否应该是每个客户、每个订单、每个项目或任何东西。请参阅您请求中评论部分中的我的问题

您可以使用EXISTS或IN来执行此操作。例如:

select firstname, lastname
from customers
where customer# in 
(
  select customer# 
  from order
  where order# in (select order# from orderitems where quantity > 1)
);

什么错误?你有错误吗?或者您认为您的结果不好?总共订购了多个项目的客户?在一个订单中订购多个项目的客户?至少多次订购一件商品的客户?在至少一次订单中订购了数量大于1的至少一个项目的客户?这是什么?你能不能不用连接功能来做。我的意思是只使用子查询select c.first、c.Lastname、oi.quantity from customers c where c.customer in select o.customer from Orders o where o.Order in select oi.Order from OrderItems where quantity>1这是在没有联接的情况下完成的。希望这对你有用。你能在不使用连接功能的情况下完成它吗。我的意思是只使用subquery@Cool-你检查过了吗?你能不使用连接功能吗。我的意思是只使用subquery,而不使用join函数。我的意思是只使用subquery@Cool我可以,但我可以问一下为什么吗?加入有什么不对吗?@在这个网站上通过投票/接受表达了酷的感激之情。这应该是我接受的答案。
SELECT c.firstname, c.lastname
FROM customer c
JOIN orders o ON c.customer# = o.customer#
JOIN orderitems oi ON o.order# = oi.order#
GROUP BY c.firstname, c.lastname
HAVING SUM(oi.quantity) > 1 AND SUM(oi.ITEM#) > 1
where (select o.quantity from orderitems where o.quantity > 1) 
where (2
       3
       4) 
select firstname, lastname
from customers
where customer# in 
(
  select customer# 
  from order
  where order# in (select order# from orderitems where quantity > 1)
);