标签: self-join

自我加入一张桌子

 CustID       Name         ReferredBy
 1         Neeta Sayam  
 2         Dolly Dilly         1
 3         Meena Kimi          2
Run Code Online (Sandbox Code Playgroud)

找到其他人推荐的所有客户的名称.

输出应该是dolly dilly和meena kimi.

我已经成功地找到了通过查询重新评估其他人的客户

 SELECT c1.name FROM Customer c1 JOIN Customer c2 ON c1.custid=c2. ReferredBy
Run Code Online (Sandbox Code Playgroud)

sql self-join sql-server-2008

3
推荐指数
1
解决办法
120
查看次数

如何使用不同的列自行加入dplyr?

我想在R中使用dplyr但无法实现经典的自联接问题.

输入:带有的数据帧empid,empnamemanagerid

输出:managername每个的数据帧empid

library(dplyr)


empid = c(1, 2, 3, 13, 11, 9, 8, 7, 3)
empname = paste0("emp", empid) 
managerid = c(0, 0, 1, 2, 2, 1, 3, 2, 1)
df = data.frame(empid, empname, managerid)
df
# empid empname managerid
#      1    emp1         0
#      2    emp2         0
#      3    emp3         1
#     13   emp13         2
#     11   emp11         2
#      9    emp9         1
#      8    emp8         3
# …
Run Code Online (Sandbox Code Playgroud)

r self-join dplyr

3
推荐指数
1
解决办法
573
查看次数

如何在SQL Server中执行上层递归自联接?

如何在SQL Server中进行递归自联接?我有这样一张桌子:

TableID | ParentID
   1    |     NULL
   2    |        1
   3    |        1
   4    |        3
   5    |     NULL
   6    |        4
   7    |        6

我希望得到以下结果,基于给出TableID所有ParentsID相关的TableID,让我们说我想得到所有的父母TableID = 6:

TableID
   6
   4
   3
   1

我坚持这个,我不知道如何在SQL查询中得到结果...希望告诉我SQL查询获取以前的数据

sql-server self-join recursive-query

2
推荐指数
1
解决办法
1993
查看次数

自己加入表 - 性能

我想为以下加入提供一些帮助.我有一个表(大约有2000万行),包括:

MemberId(主键)| Id(主键)| TransactionDate | 平衡

我想在一个查询中为所有客户获取最新的余额.我知道我可以做这样的事情(我只是从记忆中写下来的).但这种方式非常慢.

SELECT * 
FROM money 
WHERE money.Id = (SELECT MAX(Id) 
                  FROM money AS m 
                  WHERE m.MemberId = money.MemberId)
Run Code Online (Sandbox Code Playgroud)

还有其他(更快/更智能)的选择吗?

mysql self-join

2
推荐指数
1
解决办法
1425
查看次数

使用纯SQL来匹配表中的行对?

注意:这个问题对"程度"有一个模棱两可的概念.我已经得到了答案.

这些天我正在努力解决下面这样的问题:你不能用一些编程语言编写函数; 仅使用RAW SQL.

给定一个articles包含2列的表:article_idtag_name

article_id  |  tag_name
---------------------------
1              C++
1              java
1              python
2              ruby
2              js
3              ruby
4              java
4              python
Run Code Online (Sandbox Code Playgroud)

还有一个名为'tag_relations'的空表,结构如下:

tag1     |   tag2    |  degree
-----------------------------------
Run Code Online (Sandbox Code Playgroud)

现在,问题来了:

  • 编写一个"RAW SQL",根据第一个表的内容将值写入表'tag_relations'.

对于给定的数据,输出应该是这样的(我不确定程度是多少,而且问题没有提到这一点,因此,Gordon Linoff和Jonathan Leffler的答案对我来说都是正确的.):

tag1     |   tag2    |  degree
-----------------------------------
java         C++        2
java         python     4
ruby         js         2
Run Code Online (Sandbox Code Playgroud)

更新的附加信息

注1:此处问题没有描述"学位".但是我认为这是衡量2个标签之间关系的一个指标.由于'java'和'C++'有值:

article_id  |  tag_name
---------------------------
1              C++
1              java
Run Code Online (Sandbox Code Playgroud)

所以程度= 2

并为'java'和'python'

article_id  |  tag_name
---------------------------
1              java
1              python
4 …
Run Code Online (Sandbox Code Playgroud)

sql self-join

2
推荐指数
1
解决办法
5044
查看次数

Mysql Self Join在同一个表中查找父子关系

我试图计算一段时间内男性赛马(Sire)的所有后代赢得的金额.由Sire列出的最赚钱金额.我运行查询并得到结果我有一个问题,我不能显示公牛名称,只有他们的ID.

SELECT  `horses`.`SireID` AS  `SireID` , `horses`.`HorseName` AS  `Sire Name`, 
                  COUNT(  `runs`.`HorsesID` ) AS  `Runs` , 
                  COUNT( 
                           CASE WHEN  `runs`.`Finish` =1
                                THEN 1 
                                ELSE NULL 
                                END ) AS  `Wins` , 
                  CONCAT( FORMAT( (
                                COUNT( 
                                       CASE WHEN  `runs`.`Finish` =1
                                            THEN 1 
                                            ELSE NULL 
                                            END ) / COUNT
                                    (  `runs`.`TrainersID` ) ) *100, 0 ) ,  '%'
                  ) AS  `Percent` , 
           FORMAT( SUM(  `runs`.`StakeWon` ) , 0 ) AS  `Stakes` 
FROM runs
INNER JOIN horses ON runs.HorsesID = horses.HorsesID
INNER JOIN races …
Run Code Online (Sandbox Code Playgroud)

mysql sql self-join

2
推荐指数
1
解决办法
9746
查看次数

mysql加入同一张表,没有重复

我有一个instructors包含以下结构/数据的表:

-----------------
|id  | name     |
-----------------
|1   | saad     |
|2   | imran    |
-----------------
Run Code Online (Sandbox Code Playgroud)

我想在不返回重复结果的情况下对同一个表进行连接。

如果我做一个简单的连接,查询返回 4 行[saad, saad], [saad, imran], [imran, imran], [imran, saad]

如果我添加一个 where 子句,它会返回 2 行[saad, imran], [imran, saad]

但是,我只想返回 1 行,(即,如果[saad, imran]已经返回,则查询不应返回[imran, saad])。

到目前为止,这是我的查询:

SELECT DISTINCT
    i1.name AS name1,
    i2.name AS name2
FROM 
    instructors i1, instructors i2
WHERE
    i1.name != i2.name
ORDER BY
    name1, name2
Run Code Online (Sandbox Code Playgroud)

mysql join self-join

2
推荐指数
1
解决办法
2549
查看次数

通过执行自联接获取祖父名称的 Sql 查询

任何人都可以给我查询以获取孩子的名字和他的祖父的名字例如 - 如果我有一张表关系在我有孩子和父亲列那么我将如何得到祖父,

我可以通过使用连接轻松获得父亲的名字,但对于祖父,我需要进行 2 次连接,所以任何人都可以帮助我解决这个问题

马赫什

sql-server self-join

1
推荐指数
1
解决办法
3062
查看次数

LINQ 使用扩展方法语法连接具有不同记录的多个列

对不起,如果我的问题没有多大意义。让我解释。

我有一个现有的 SQL 查询,如下所示:

 SELECT 
     T1.Portfolio, T1.ValueDate as CurrentValueDate, 
     T1.DifferencePercent as CurrentDP, 
     T2.ValueDate as PreviousValueDate, 
     T2.DifferencePercent as PreviousDP,
     CASE 
        WHEN T1.DifferencePercent = T2.DifferencePercent 
          THEN 1 
          ELSE 0 
     END as IsChange
 FROM 
     [AccountingData].[dbo].[NAVRec_NAVSummary] T1
 JOIN 
     [AccountingData].[dbo].[NAVRec_NAVSummary] T2 ON T1.Portfolio = T2.Portfolio AND T2.ValueDate = DATEADD(DAY, CASE DATENAME(WEEKDAY, T1.ValueDate) WHEN 'Sunday' THEN -2 WHEN 'Monday' THEN -3 ELSE -1 END, DATEDIFF(DAY, 0, T1.ValueDate))
Run Code Online (Sandbox Code Playgroud)

所以基本上,我对显示投资组合以及一列感兴趣,该列说明投资组合的DifferencePercent价值是否与前一个工作日相同投资组合的价值发生了变化。

我正在尝试使用扩展方法语法将相同的 sql 查询转换为 LINQ。但是,现在我只是想使用 Portfolio 属性和今天的 Portfolio 的 ValueDate 和上一个业务日期的同一投资组合的 ValueDate 进行自连接。

var result = NavList.Join(NavList, …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server self-join

1
推荐指数
1
解决办法
1301
查看次数

SQL查询查找至少有2个男性和2个女性孩子的记录

在一次采访中,我被要求找出每种性别至少有一个孩子的父母的姓名,即至少 1 名男性和 1 名女性。我解决了这个问题。然后他们修改了问题以查找至少有 2 个男孩和 2 个女孩的父母的姓名。这是表: 表名称:Children

这是我用于第一次询问的查询:

SELECT distinct C1.Parent_Name 
FROM Children C1 
JOIN Children C2
  ON C1.Parent_Name = C2.Parent_Name
WHERE C1.Child_Gender = 'Male' AND C2.Child_Gender = 'Female';
Run Code Online (Sandbox Code Playgroud)

您能帮忙解答一下第二个问题吗?

sql self-join

1
推荐指数
1
解决办法
6928
查看次数

标签 统计

self-join ×10

sql ×4

mysql ×3

sql-server ×3

c# ×1

dplyr ×1

join ×1

linq ×1

r ×1

recursive-query ×1

sql-server-2008 ×1