这是一张表的摘录:
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进行查询。
我真的有问题要了解如何继续。任何意见都非常感谢。
答案 0 :(得分:1)
如果我理解正确,您需要找到type
的' ref'然后使用ref_def_id
列中的值来获取def_id
中具有相同值的行。在这种情况下,您需要使用子查询来获取带有' ref'使用IN
或EXISTS
:
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;