我想从这个数据集中检索行,其中存在t1/t3值,但不存在对应id的t2/t3值。
ID sample1 sample2 value
A_000002 T2 T3 -0.934119
A_000002 T1 T3 -0.866637
A_000029 T2 T3 -1.07677
A_000037 T2 T3 -0.76506
A_000057 T1 T3 -5.34988
我想说的是:
SELECT * FROM table
WHERE DISTINCT ID
AND sample_1 == "T1"
AND sample_2 == "T3"
…并仅返回以下内容,因为它没有对应于该id的t2/t3行:
A_000057 T1 T3 -5.34988
如果我使用sample_1和sample_2条件,我会得到不同的值,因为它会在检查id是否不同之前过滤掉“t2”值。
最近的一次是用可能的t1/t2/t3组合生成3个表,并筛选不存在的t1t2.id=t2t3.id
select * from T1T2
where not exists (select * from T2T3 where T2T3.id = T1T2.id)
and not exists (select * from T1T3 where T1T3._id = T1T2.id)
order by id
不过,我还不确定我是否相信代码。
4条答案
按热度按时间cwxwcias1#
我会用
not exists
:h9a6wy2h2#
你可以用
not exists
:qgelzfjb3#
这将是一个残酷的工作:
从表中选择distinct id,*其中sample1='t1'和sample2='t3'
v9tzhpje4#
可以基于外部联接使用此技术:
它之所以有效,是因为如果没有连接,外部连接将返回null,而您只能通过
t2.id is null
中的条件where
条款。这种技术的最大优点是有效地使用
id
列;这项技术通常比其他方法更有效。另外,我觉得这是一个整洁的查询。请注意
sample
列必须处于的联接条件中t2
,否则将有效地获得一个内部连接,从而破坏所需的外部连接。