我有一个客户表和订单表。在客户表中,我们有"家庭链接"列,这是每个客户的给定ID。例如familyLink:A121,如果该客户的表中有家庭成员,他们也会有这个ID:A121。基本上,我需要退回所有没有家庭成员的客户,并订购了编号为2或3的
Customer
表:
CustmID(PK), Name(varchar), familyLink(varchar).
Order
表:
OrderID(PK), order_number (varchar), CustmID(FK)
我返回的查询似乎没有返回没有家庭成员的客户。。
Select Distinct
c.familyLink,
c.name,
o.order_number
From
Customer c
Left join
Order o on c.CustmID = o.CustmID
where
(o.order_number = 2 or order_number=3)
示例:
客户表
Custm ID Name FamilyLink
C1 Liam A11
C2 Lucy A12
C3 David A11
C4 Suzy A13
订单表
OrderID Order_Number CustmID
O1 2 C1
O2 3 C2
O3 2 C4
结果`此查询应返回Lucy和Suzy,因为他们在客户表中没有任何家庭成员。。
知道为什么这是共享familyLink的回头客吗?
感谢您的帮助。
知道为什么会有共享familyLink的回头客吗?
因为查询中没有任何限制。您正在请求o.order_number = 2
或order_number = 3
所在的所有行;没有什么是"不让没有家庭关系的顾客退货"。
SQL中也有语法错误,特别是Left join Order
。ORDER
是SQL Server和大多数(如果不是所有(SQL语言中的保留关键字。强烈建议您不要为对象提供保留关键字或未来关键字的名称。如果确实有一个名称具有保留关键字的对象,则必须引用它:[Order]
。
至于你想要什么,这完全是猜测,但也许:
WITH CTE AS(
SELECT C.familyLink,
C.name,
O.order_number,
COUNT(C.CustmID) OVER (PARTITION BY O.order_number) AS Customers
FROM Customer C
INNER JOIN [Order] O ON C.CustmID = O.CustmID --This is an INNER JOIN, as the WHERE must be met, so there can never not be a row
WHERE O.order_number IN (2,3))
SELECT C.familyLink,
C.name,
C.order_number
FROM CTE
WHERE Customers = 1;
如果这不起作用,您将需要提供示例数据和预期结果。然而,我认为这是一个答案,因为我的开场白也太长了,无法发表评论。