2014-04-26 74 views
2

好的,我有這種表如何檢索從同一個表(MYSQL)中的其他行取值的行?

 
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塊的數據(注意:相對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 &那麼它將查詢的類型=在塊11 2 &印出200

練習2:如果用戶輸入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 

上面的查詢工作,但過長&也許慢,你可以把它縮短&使其運行速度更快?

回答

1

你爲什麼還選擇versionParentRelId?他們是否也確定Block?即是否可以有不同的塊具有相同的RelID但是具有不同的version和/或不同的parentRelID

如果沒有,試試這個:

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) 
+0

控件ID可以在其他塊重複說塊3例如 – Tum

+0

第二查詢運行速度比第一個查詢? – Kiti

+0

如果'controlId'可以在另一個「Block」中重複,那麼什麼定義了一個「Block」?如果它不是'ControlId',那麼我提供的這些查詢將不適用於這些場景。至於性能差異,看看查詢計劃,看看爲什麼... –

1
SELECT t1.RelId FROM table t1 
    INNER JOIN table t2 
    ON t1.ControlId = t2.ControlId 
WHERE t2.RelId = 700 
AND t1.type = 11 
相關問題