首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表中的自联接

表中的自联接
EN

Stack Overflow用户
提问于 2011-09-27 17:52:49
回答 2查看 124关注 0票数 3
代码语言:javascript
复制
 CustID       Name         ReferredBy
 1         Neeta Sayam  
 2         Dolly Dilly         1
 3         Meena Kimi          2

查找所有被他人推荐的客户的名字。

输出应该是dolly和meena kimi.

我成功地为那些通过查询向他人提供咨询服务的客户找到了答案。

代码语言:javascript
复制
 SELECT c1.name FROM Customer c1 JOIN Customer c2 ON c1.custid=c2. ReferredBy
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-27 17:57:39

除非我错过了什么:

代码语言:javascript
复制
SELECT *
FROM Customer
WHERE ReferredBy IS NOT NULL
票数 6
EN

Stack Overflow用户

发布于 2011-09-27 18:26:59

实现您想要的东西有很多方法,但是一个有趣的方法是使用CTE,因为它允许您按级别获取引用,例如,在您的示例中,零级别将是没有引用的Neeta syam,第一级是dolly dillymeena kimi。下面的查询将返回dolly dillymeena kimi,它们位于where reference = 1指定的一级,如下所示:

代码语言:javascript
复制
WITH CTEs (Id, CustomerName, Reference, RefCustomer)
AS
(
  SELECT 
    Id,
    Name,
    0 As Reference, 
    CONVERT(VARCHAR(length), 'No Reference') AS RefCustomer 
  FROM Customers 
  WHERE ReferredBy IS NULL
  UNION ALL
  SELECT
    c.CustId,
    c.Name, 
    cs.Reference + 1, 
    cs.CustomerName 
  FROM Customers c 
  INNER JOIN Ctes cs ON c.ReferedBy = cs.Id
)
SELECT CustomerName, RefCustomer 
FROM Ctes 
WHERE Reference = 1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7573526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档