我有两张表Customers
和Orders
。 OrderID
包含以下列:CustomerID
,Customers
。 CustomerID
包含列:CustomerName
,Customers
。我有一些来自SELECT DISTINCT(CustomerName) OrderID, Orders.CustomerID, CustomerName
FROM Customers
LEFT JOIN Orders ON Orders.CustomerID = Customers.CustomerID
ORDER BY CustomerName;
但没有任何订单的记录。所以我希望得到所有独特的客户(即使他们没有订单)和订单。
我想通过使用此查询来获取它:
OrderID
但它会将CustomerName
列值替换为SELECT OrderID, CustomerID, CustomerName
FROM
(
SELECT DISTINCT(CustomerName) OrderID, Orders.CustomerID, CustomerName
FROM Customers
LEFT JOIN Orders ON Orders.CustomerID = Customers.CustomerID
ORDER BY CustomerName
);
个值。
这就是为什么我应该使用以下查询来获得所需的结果。
sudo apt-get install libc6
我的第一个查询是否有任何错误?有可能解决它吗?
答案 0 :(得分:3)
Convert.ToInt32(_idlicense.Value)
将返回多条记录
OrderID
适用于整个记录,而不是单个字段,因此如果客户有多个订单,它将显示两条记录 - 客户将是相同的,但订单ID不同,因此两个记录都将与众不同。
如果您DISTINCT
订单ID和COUNT
Group
您将获得独特的客户以及他们已完成的订单数量:
CustomerName
答案 1 :(得分:0)
使用它:
SELECT DISTINCT(CustomerName) as CusName, OrderID, Orders.CustomerID
FROM Customers LEFT JOIN Orders ON Orders.CustomerID =
Customers.CustomerID ORDER BY CusName;
您正在使用客户名称两次,实际上OrderId在您的情况下是别名列名称CustomerName:)
答案 2 :(得分:0)
首先,您必须明白,如果您想要OrderId col,则意味着如果每个客户有多个订单 - 它将复制行。 所以你必须选择:或每个客户的不同行或显示订单你不能同时拥有它们! (这是一个逻辑问题而不是SQL错误) 无论如何你必须使用LEFT OUTER JOIN才能看到没有订单的客户。
一个选项是计算订单:
SELECT C.CustomerName, COUNT(0) AS NumOfOrders
FROM Customers C
LEFT OUTER JOIN Orders O ON O.CustomerID = C.CustomerID
GROUP BY C.CustomerName
ORDER BY C.CustomerName;
另一种选择是允许重复:
SELECT C.CustomerName, O.OrderID
FROM Customers C
LEFT OUTER JOIN Orders O ON O.CustomerID = C.CustomerID
ORDER BY C.CustomerName;