繁体   English   中英

使用自联接查找所有链接记录

[英]Find all linked records using self join

我有这张表,我正在尝试使用自联接。 我只能达到预期结果的 50%。

create table auto_correct(spell varchar(255), ne varchar(255));
insert into auto_correct values ('test', 'testing');
insert into auto_correct values ('adn', 'and');
insert into auto_correct values ('and', 'andru');
insert into auto_correct values ('testing', 'tested');
insert into auto_correct values ('this', 'that');
insert into auto_correct values ('junk', 'delete');
拼写 ne
测试 测试
广告
安德鲁
测试 测试
垃圾 删除

单词“test”通过“testing”链接到“tested” 单词“adn”通过“and”链接到“andru” 如何找到所有此类链接记录并与非链接行一起显示?

预期的结果是:

拼写 ne
测试 测试
广告 安德鲁
垃圾 删除

我试过这个:

select b.spell, a.ne 
from auto_correct as a 
left join auto_correct as b on a.spell = b.ne 
where b.spell is not null;

返回:

广告 安德鲁
测试 测试

上述输出中缺少未找到匹配项的其余记录。

WITH RECURSIVE
cte AS ( SELECT *
         FROM auto_correct
         WHERE NOT EXISTS ( SELECT NULL
                            FROM auto_correct ac
                            WHERE auto_correct.spell = ac.ne )
       UNION ALL
         SELECT cte.spell, auto_correct.ne
         FROM cte
         JOIN auto_correct ON cte.ne = auto_correct.spell )
SELECT *
FROM cte
WHERE NOT EXISTS ( SELECT NULL
                   FROM auto_correct
                   WHERE auto_correct.spell = cte.ne )

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e90235ce5dde96a7255f8afe1a19d334

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM