SQL查询具有关系的两列

时间:2019-10-04 14:45:44

标签: mysql sql

我在表id_std中有一列名为account的列。

account表中,我具有名称为parent_account_id的递归关系

我正在尝试获取parent_account_id =选中的idid_std = 333的所有记录,id_std是表的唯一值

示例:

id - id_std - parent_account_id - name
 1    333     null                 Name 1
 2    129     1                    Name 2
 3    249     1                    Name 3

如何使用333 id_std进行过滤,并在同一查询中包括所有带有parent_account_id = 1的记录?

3 个答案:

答案 0 :(得分:0)

您可以在帐户上使用自动加入

select  a.id, a.id_std, a.parent_account_id, a.name, b.id, b.id_std, b.parent_account_id, b.name
from account a 
inner join  account b on a.id = b.parent_account_id 
 where  a.id_std = 333

答案 1 :(得分:0)

我正在根据您的示例数据做出的假设是id_std = 333的只有一行,所以:

select * from account where parent_id = (select id from account where id_std = 333)

如果有多行,其中id_std = 333,则:

select * from account where parent_id in (select id from account where id_std = 333)

(当然,即使id_std = 333是唯一的,上述方法也可以使用。)

答案 2 :(得分:0)

您还可以使用限制器进行层次结构查询,以便仅获取层次结构的第一级。

select a.* from mytable a
start with id_std = 333
connect by prior id = parent_account_id and prior thename = 'Name 1'

这是一个小提琴 http://sqlfiddle.com/#!4/d8dfd/19