找到从未订购意大利辣香肠披萨的顾客

时间:2012-03-30 15:02:08

标签: mysql select

我有一个家庭作业问题,请帮助我做一些解释,以便我能理解。

您正在撰写查询,寻找从未订购意大利辣香肠比萨的所有客户。哪个查询最匹配?

select distinct 
  c.customer_name 
from 
  customer c, 
  orders o 
where 
  o.customer_id = c.customer_id 
  and o.pizza_type = ‘pepperoni

select 
   c.customer_name 
from 
  customer c 
where 
  c.customer_id not in 
  (
     select 
       o.customer_id 
     from 
       orders o 
     where 
       o.pizza_type != ‘pepperoni’
  )

select distinct 
  c.customer_name 
from 
  customer c 
  left join orders o 
    on on.customer_id = c.customer_id 
    and o.pizza_type = ‘pepperoni’ 
where 
  o.pizza_type is null

select 
  c.customer_name 
from 
  customer c, 
  orders o 
where 
  o.customer_id = c.customer_id 
  and o.pizza_type = ‘pepperoni’ 
group by 
  c.customer_name 
having count(*) = 0

3 个答案:

答案 0 :(得分:2)

3 ,假设on.customer_id是您的错字,应为o.customer_id

说明:

1 :选择所有订购意大利辣香肠披萨的客户。

2 :选择所有只订购意大利辣香肠披萨的客户。

3 :选择所有从未订购意大利辣香肠披萨的客户。

4 :不会选择任何人。

答案 1 :(得分:1)

  • 选项1返回订购披萨的客户
  • 选项2还会返回订购披萨的客户(因为not in!= ‘pepperoni’)为真
  • 选项3返回未订购任何比萨饼的顾客。因为最后的检查,检查,以便该客户没有'辣味纸'(正确!)
  • 选项4不会返回任何内容

答案 2 :(得分:1)

  1. 此查询选择已经订购意大利辣香肠的人,而不是那些没有订购意大利辣香肠的人。

  2. 这也选择了所有订购意大利辣香肠的人。在子查询中,它选择所有不是意大利辣香肠的订单,然后(在主查询中),它查找不在该子查询中的所有客户。因此,你得到所有没有订购“不辣椒”比萨饼的人,所以每个人都订购了意大利辣香肠。

  3. 这是正确的查询。

  4. 这不会返回任何结果。