如何检索从同一个表(MYSQL)中的其他行获取值的行?

时间:2014-04-26 14:43:50

标签: mysql sql

好的,我有这张桌子

ControlID - Version - Type - Rel ID  - Parent Rel ID
1         - 2       - 11   - 212     - 5
1         - 2       - 44   - 542     - 5
1         - 2       - 47   - 742     - 5

2         - 2       - 11   - 200     - 4
2         - 2       - 14   - 565     - 4
2         - 2       - 20   - 700     - 4

如上表所示,我们有2个区块的数据(注意: Rel ID是唯一的):

第1座

ControlID - Version - Type - RelID  - ParentRelID
1         - 2       - 11   - 212     - 5
1         - 2       - 44   - 542     - 5
1         - 2       - 47   - 742     - 5

第2区

ControlID - Version - Type - RelID  - ParentRelID
2         - 2       - 11   - 200     - 4
2         - 2       - 14   - 565     - 4
2         - 2       - 20   - 700     - 4

好的,现在用户将输入任何relID&系统将在输入的relID的同一块中显示类型= 11的Rel ID

例如:如果用户输入700,则会知道700属于第2块&那么它将搜索块2中的类型= 11&打印出200

Ex2:如果用户输入742,则会知道742属于第1区&那么它将搜索块1中的类型= 11&打印出212

这是我的查询,但我认为它太长了可能很慢。

Select relID from mytable where  controlID = (select controlID from mytable where relID=700) 
and 
version= (select version from mytable where relID=700) 
and parentRelID= (select parentRelID from mytable where relID=700) 
and type=11

以上查询有效,但过长而且可能很慢,你能缩短它吗?让它跑得更快?

2 个答案:

答案 0 :(得分:1)

为什么还要选择versionParentRelId?他们还确定了Block吗?即,是否可以存在具有相同RelID但具有不同version和/或不同parentRelID s的不同块?

如果没有,试试这个:

Select * From table t
Where type = 11
   And ControlId =
        (Select ControlId 
         From table
         Where RelId = @RelId)

或......

Select * From table t
Where type = 11
    and exists (Select * from table
                Where relId = @RelId
                  and ControlId = t.ControlId)

答案 1 :(得分:1)

SELECT t1.RelId FROM table t1
    INNER JOIN table t2
    ON t1.ControlId = t2.ControlId
WHERE t2.RelId = 700
AND t1.type = 11