仅返回唯一的行-TSQL



我有一个客户表和订单表。在客户表中,我们有"家庭链接"列,这是每个客户的给定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 = 2order_number = 3所在的所有行;没有什么是"不让没有家庭关系的顾客退货"。

SQL中也有语法错误,特别是Left join OrderORDER是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;

如果这不起作用,您将需要提供示例数据和预期结果。然而,我认为这是一个答案,因为我的开场白也太长了,无法发表评论。

最新更新