我想加入两张桌子。一个包含客户列表,另一个是订单列表。我正在尝试制定一个查询,允许我选择表客户中列出的所有客户订单中至少有一个订单。但是,我不想为那些有多个订单的客户提供重复项。有什么建议我可以做到这一点吗?
我知道这可能是一个常见的问题,但我不知道这种类型的查询会被调用,以便我可以搜索答案。任何建议将不胜感激。感谢。
答案 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是否排在第一位。