需要比较一些帐户,其中有些人拥有两个帐户,即管理员帐户和普通帐户。这些管理员帐户将其普通帐户列为管理员,并且所有管理员帐户均以1开头。我如何使它拉动管理员行以及具有管理员帐户的行?
我尝试使用“哪里存在”和“哪里存在”,我似乎想不出一种使用Select来兼任经理的方法,这是我现在认为的一些先见之明。
SELECT *
FROM
view
WHERE id like '1%'
预期结果应该拉动以1和其经理开头的每个帐户。
因此,如果Bob在帐户表中有两行,其中一行名为1Bob,另一行名为Bob,并且1Bob在1Bob Manager列中将Bob列为经理,则结果应提取1Bob和Bob
Input
+--------+-------+---------+
| Number | ID | Manager |
+--------+-------+---------+
| 1 | 1Bob | Bob |
| 2 | Bob | Cindy |
| 3 | Cindy | Derek |
+--------+-------+---------+
Result
+--------+------+---------+
| Number | ID | Manager |
+--------+------+---------+
| 1 | 1Bob | Bob |
| 2 | Bob | Cindy |
+--------+------+---------+
答案 0 :(得分:2)
您可以使用exists
子句:
select v.*
from view v
where v.id like '1%' or
exists (select 1 from view v2 where v2.manager = v.id and v2.id like '1%');
答案 1 :(得分:1)
像您的数据体系结构之类的声音需要一些认真的帮助。但是,只要有描述,您就可以按照以下思路将其混淆在一起。
SELECT *
FROM
view v
join view v2 on v2.id = substring(v.Manager, 2, len(v.Manager))
WHERE v.id like '1%'
-编辑- 尝试用对表结构的新理解来更新它。