我有以下数据
Ftitle Fvalue Freference
------ ---------- ---------
filename file1.java 123
version 2 123
cvstree branch1 123
filename file2.java 345
version 4 345
cvstree branch2 345
filename file1.java 4556
version 3 4556
cvstree branch1 4556
filename file3.java 4312
version 77 4312
cvstree branch2 4312
filename file1.java 5616
version 1 5616
cvstree branch3 5616
我在某些行之间给出了一个空白行,以便于阅读。由于各种原因,表格结构无法更改,表格中包含大量数据和大量数据。
现在,我所拥有的只是Fvalue,例如file1.java。我想知道我是否可以使用TSQL语句,以便在单个查询中获得,例如所有不同的Freference值,其中分支与我指定的匹配。
所以,例如,如果我给出一个查询,我想为branch1的file1.java匹配,那么我只想让SQL返回“Freference”4556和123。
如果不循环遍历file.java的所有“Freference”值,然后在Fvalue为branch1的地方进一步过滤,这是否可行?这种循环变得非常慢。
答案 0 :(得分:3)
SELECT --DISTINCT intersect removes duplicates
Freference
FROM
MyTable M1
WHERE
M1.Fvalue = 'file1.java'
INTERSECT
SELECT --DISTINCT intersect removes duplicates
Freference
FROM
MyTable M2
WHERE
M2.Fvalue = 'branch1'
OR
SELECT DISTINCT
M.Freference
FROM
MyTable M
WHERE
M.Fvalue = 'file1.java'
AND
EXISTS (SELECT * FROM
MyTable M2
WHERE
M2.Fvalue = 'branch1'
AND
M.Freference = M2.Freference)
答案 1 :(得分:3)
INTERSECT是一个选项
但直接连接可以更好地支持DBMS。
select distinct a.freference
from tbl a
inner join tbl b on a.freference = b.freference and b.fvalue = 'branch1'
where a.fvalue = 'file1.java'
答案 2 :(得分:2)
你只想加入桌子,这很容易。
编辑:这个怎么样?
select a.Freference
from table a inner join table b
on a.Freference = b.Freference
and a.Ftitle = 'filename'
and b.Ftitle = 'cvstree'
where
a.Fvalue ='file1.java'
and b.Fvalue = 'branch1'
答案 3 :(得分:1)
select *
from theTable
where Ftitle = 'file1.java'
and Fvalue = 'branch1'
答案 4 :(得分:0)
是每个三联体特有的游离度? 换句话说,可以任何其他一组 行有4312作为Freference?
是的,Freference对每个三元组都是唯一的。对不起,如果我之前没有提到。我在此期间尝试各种想法