SQL将一个查询的结果用于另一个查询

时间:2017-10-28 10:10:22

标签: mysql sql join

这是一张表的摘录:

vips

我想要的是找到类型为ref的条目。然后我会在我的结果中输入这个条目:

| id | type    | other_id | def_id | ref_def_id|
| 1  | int     | NULL     |  5     | NULL     |
| 2  | string  | NULL     |  5     | NULL     |
| 3  | int     | NULL     |  5     | NULL     |
| 20 | ref     | 3        |  NULL  | 5        |
| 21 | ref     | 4        |  NULL  | 5        | 
| 22 | ref     | 5        |  NULL  | 5        |  

我面临的问题是我现在想要将此条目与同一表中def_id = 5的其他条目组合。

所以我会得到def_id = 5的所有条目作为结果的特定ref类型。我以某种方式需要第一个查询的输出,检查ref_def_id是什么,然后再为此id进行查询。

我真的有问题要了解如何继续。任何意见都非常感谢。

4 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要找到type的' ref'然后使用ref_def_id列中的值来获取def_id中具有相同值的行。在这种情况下,您需要使用子查询来获取带有' ref'使用INEXISTS

键入并组合它
select *
from YourTable
where def_id in (select ref_def_id from YourTable where type='ref');

select *
from YourTable
where exists (select * from YourTable yt
  where yt.ref_def_id=YourTable.def_id and yt.type='ref')

两个查询都是等价的,IN乍一看更容易理解,但EXISTS允许更复杂的条件(例如,您可以使用多个列与子查询组合)。

修改,因为您评论说您还需要来自' ref'的id。然后你需要使用子查询:

select source_id, YourTable.*
from YourTable
join (select id as source_id, ref_def_id
      from YourTable
      where type='ref')
as refs on refs.ref_def_id=YourTable.def_id
order by source_id, id;

对于每个' ref'您将获得具有关联ref_id的所有行。

答案 1 :(得分:0)

您正在寻找的是子查询或甚至更好的连接操作。

看看这里:http://www.mysqltutorial.org/mysql-left-join.aspx

连接/左连接允许您在给定条件下组合一个查询中的表行。为您的目的,条件可能是id = 5。

答案 2 :(得分:0)

您似乎想要聚合:

select max(id) as id, type, max(other_id) as other_id,
       max(def_id) as def_id, ref_def_id
from t
where type = 'ref'
group by type, ref_def_id

答案 3 :(得分:0)

使用下面的查询从子查询中获取列。

select a.ref_def_id
from (select ref_def_id from YourTable where type='ref') as a;