MySQL - 加入两个没有重复的表?

时间:2011-01-27 17:06:37

标签: mysql

我想加入两张桌子。一个包含客户列表,另一个是订单列表。我正在尝试制定一个查询,允许我选择表客户中列出的所有客户订单中至少有一个订单。但是,我不想为那些有多个订单的客户提供重复项。有什么建议我可以做到这一点吗?

我知道这可能是一个常见的问题,但我不知道这种类型的查询会被调用,以便我可以搜索答案。任何建议将不胜感激。感谢。

4 个答案:

答案 0 :(得分:9)

这比你想象的要简单得多:

select distinct(customer_id) from orders;

编辑:如果您确实希望获得有关客户的完整信息,

select * from customers where customer_id in (select distinct(customer_id) from orders);

答案 1 :(得分:7)

使用:

SELECT c.*
  FROM CUSTOMERS c
 WHERE EXISTS (SELECT NULL
                 FROM ORDERS o
                WHERE o.custeromid = c.id)

IN子句是一种替代方法,但是EXISTS对于重复项更有效,因为它在第一个副本上返回true,因此它不处理整个表。

答案 2 :(得分:2)

select customers.id, customers.name, count(orders.id)
from customers 
   inner join orders on orders.customer_id = customers.Id
group by customers.id, customers.name
having count(orders.id) > 0

答案 3 :(得分:0)

SELECT
  c.id, 
  c.name
FROM
  customer c
    INNER JOIN order o ON o.customer_id = c.id
GROUP BY 
  c.id,
  c.name
HAVING
  COUNT(o.id) >= 1

不记得HAVING或GROUP BY是否排在第一位。