用于条件选择的

时间:2016-01-28 21:51:30

标签: sql

我有一个关于如何从一个客户的订单表(Oracle)中检索数据的问题,如下所示:

id   customer cake          top   
1    001      chocolate     cream
2    002      chocolate     jam
3    002      vanilla       cream
4    003      banana        cream

我想知道订单中包含巧克力蛋糕的客户的所有订单。

正确的结果应该是

id   customer cake          top   
1    001      chocolate     cream
2    002      chocolate     jam
3    002      vanilla       cream

我可以通过SQL中的2个单独查询来完成此操作,但有没有办法在单个查询中执行此操作?

非常感谢!

5 个答案:

答案 0 :(得分:2)

您应该使用子查询来获取客户:

select * from order where customer in (
  select distinct customer from order where cake = 'chocolate'
)

答案 1 :(得分:1)

选择包含巧克力的订单的不同客户的子查询将起作用:

select 
  * 
from 
  order 
where 
  customer 
in (select 
      distinct customer 
    from 
      order 
    where 
      cake = 'chocolate')

答案 2 :(得分:1)

您可以使用内部查询来执行此操作。

SELECT * FROM ORDER WHERE CUSTOMER IN (
    SELECT CUSTOMER FROM ORDER WHERE cake = 'chocolate'
 )

答案 3 :(得分:1)

这样的事情应该有效:

SELECT *
FROM customers
WHERE EXISTS (SELECT 1
              FROM order_details
              WHERE customers.id = order_details.customer_id
              AND cake = 'chocolate');

编辑:添加巧克力蛋糕条件。

答案 4 :(得分:0)

SELECT * FROM ORDER O1 WHERE EXISTS (
    SELECT NULL FROM ORDER O2 WHERE O1.ID = O2.ID AND cake = 'chocolate'
 )

您可以尝试使用此子查询的变体。