如果符合条件,则从第一行中拉出另一行

时间:2019-06-19 18:32:26

标签: sql sql-server

需要比较一些帐户,其中有些人拥有两个帐户,即管理员帐户和普通帐户。这些管理员帐户将其普通帐户列为管理员,并且所有管理员帐户均以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   |
+--------+------+---------+

2 个答案:

答案 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%'

-编辑- 尝试用对表结构的新理解来更新它。