我有一个名为TEST的单表如下:
job_id input_id match_outcome
101 1 MATCH
101 2 NO_MATCH
201 1 NO_MATCH
201 2 MATCH
预期结果:
job_id input_id match_outcome
201 1 NO_MATCH
101 2 NO_MATCH
我使用的查询:
select *
from ( select * from TEST where job_id = '101') q1 join
(select * from TEST where job_id = '201') q2
where q1.match_outcome= 'MATCH' and q2.match_outcome= 'NO_MATCH' OR
q2.match_outcome= 'MATCH' and q1.match_outcome= 'NO_MATCH'
总体目标: 我需要input_id和其他数据,这些数据是MATCH和一个job_id,而输入id在另一组作业id中是NO MATCH。但是这个查询需要更长的时间,因为这些表包含数百万条记录而且我没有看到结果呢。(Fyi,我正在使用蜂巢表)任何有效或任何不同的更好的方式来做这个!谢谢
答案 0 :(得分:-1)
如果我试着理解这一点:"我需要input_id。 。 。这是与一个job_id的MATCH和输入id在另一组作业ID"中的NO MATCH,然后你可以使用聚合:
select input_id
from text
group by input_id
having sum(case when match_outcome = 'MATCH' then 1 else 0 end) > 0 and
sum(case when match_outcome = 'NO MATCH' then 1 else 0 end) > 0;
这假设input_id
与job_id
没有重复,这似乎与问题中的数据一致。
如果您想要原始数据行,那么您可以join
进入查询:
select t.*
from test t join
(select input_id
from text
group by input_id
having sum(case when match_outcome = 'MATCH' then 1 else 0 end) > 0 and
sum(case when match_outcome = 'NO MATCH' then 1 else 0 end) > 0
) i
on t.input_id = i.input_id;
答案 1 :(得分:-2)
从TEST中选择* match_outcome ='NO_MATCH'