我有两个表需要连接。一个包含客户列表,另一个包含订单列表。我正在尝试构建一个查询,以便选择在订单表中至少有一个订单的所有客户在客户表中列出。但是,我不想获取那些有多个订单的客户的重复记录。您有什么建议吗?
我知道这可能是一个常见的问题,但我不知道这种类型的查询应该被称为什么,因此无法搜索答案。非常感谢您的建议。谢谢。
我知道这可能是一个常见的问题,但我不知道这种类型的查询应该被称为什么,因此无法搜索答案。非常感谢您的建议。谢谢。
这比您想象的要简单得多:
select distinct(customer_id) from orders;
编辑:如果您确实想获得客户的完整信息,
select * from customers where customer_id in (select distinct(customer_id) from orders);
使用:
SELECT c.*
FROM CUSTOMERS c
WHERE EXISTS (SELECT NULL
FROM ORDERS o
WHERE o.custeromid = c.id)
IN子句是一个替代方案,但是EXISTS更适用于重复项,因为它在第一个重复项上返回true,所以它不会处理整个表。
o.customerid
上建立索引,它不仅会表现得更好(很多)吗? - Klaus Byskov Pedersenselect 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
select customer_id, count(*) from orders group by customer_id
即可完成任务。 - Michael KopinskySELECT
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哪个先出现了。