好的,我有这张桌子
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
以上查询有效,但过长而且可能很慢,你能缩短它吗?让它跑得更快?
答案 0 :(得分:1)
为什么还要选择version
和ParentRelId
?他们还确定了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