Sql 将表链接到自身并获取关系ID

Sql 将表链接到自身并获取关系ID,sql,Sql,我希望获得与其他帐户具有相同id的帐户,然后最终确定它与哪个帐户相关(例如,请参见下表) 表结构 Account ID | flag | id2 123 | Y | 1 456 | N | 1 789 | N | 1 888 | Y | 2 999 | N | 2 我想要的结果是: Account ID | id2 | src_account_id 456 | 1 | 123 789 | 1 | 123 999 | 2 | 888 这是我的疑问 Select account_

我希望获得与其他帐户具有相同id的帐户,然后最终确定它与哪个帐户相关(例如,请参见下表)

表结构

Account ID | flag | id2

123 | Y | 1

456 | N | 1

789 | N | 1

888 | Y | 2

999 | N | 2
我想要的结果是:

Account ID | id2 | src_account_id

456 | 1 | 123

789 | 1 | 123

999 | 2 | 888
这是我的疑问

Select account_id, id2, src_account_id
FROM table1
WHERE id2 IN (Select id2 FROM table1 WHERE flag = 'Y')

但是我一直在研究如何获取src\u帐户id。我很确定这涉及到将表内部连接到自身,但我仍然不确定如何获取src\u帐户id。

您可以尝试一下。使用子查询获取
标志='Y'
结果集。然后自连接

SELECT  t1.AccountID,t1.id2,t2.AccountID
FROM T t1 inner join (
  SELECT id2,AccountID
  FROM T
  WHERE flag = 'Y' 
 ) t2 on t1.id2 = t2.id2
 WHERE t1.flag = 'N'

[结果]

| AccountID | id2 | AccountID |
|-----------|-----|-----------|
|       456 |   1 |       123 |
|       789 |   1 |       123 |
|       999 |   2 |       888 |

id2
flag
上自动加入表

SELECT t1."Account ID",
       t1.id2,
       t2."Account ID" src_account_id
       FROM elbat t1
            INNER JOIN elbat t2
                       ON t2.id2 = t1.id2
                          AND t1.flag = 'N'
                          AND t2.flag = 'Y';

是的,这非常有效,并给出与下面的查询相同的结果。很高兴知道我也可以作为子查询进行内部连接。工作非常完美,完全符合我的要求-非常感谢!