我不知道如何编写SQL查询。
给定数据:
几个特征标识符整数-假设1和447。
我正在寻找domain_ids,我将在其中找到分配给特定特征的snp。当SNP的genomic_pos
在域start
和end
之间且chr_id
相同时,SNP在该域中。共有两种情况:
在所有情况下,我都在寻找可以从所有给定特征中找到snps的域。换句话说,所有特征在域中都有其snp代表。
无论如何,我都在寻找可以从任何给定域中找到snps的域。换句话说,仅找到域中任何特征的一个snp代表就足够了。
我已经解决了所有情况,但我坚持所有情况:(
这是任何代码:
SELECT DISTINCT domains.domain_id
FROM snps JOIN traits_snps ON snps.snp_id = traits_snps.snp_id
JOIN traits ON traits.trait_id = traits_snps.trait_id
JOIN chromosomes ON snps.chr_id = chromosomes.chr_id
JOIN domains ON domains.chr_id = chromosomes.chr_id
WHERE traits.trait_id in (447,1 ) -- <-- HERE GOES TRAIT IDS
AND genomic_pos BETWEEN start AND end
AND domains.chr_id = snps.chr_id;
这是我在SQLite中的数据库。
最佳答案
如果我理解正确,您可以使用group by
和having
做您想做的事情:
SELECT d.domain_id
FROM snps s JOIN
traits_snps ts
ON s.snp_id = ts.snp_id JOIN
traits t
ON t.trait_id = ts.trait_id JOIN
chromosomes c
ON s.chr_id = c.chr_id JOIN
domains d
ON d.chr_id = c.chr_id AND
d.chr_id = s.chr_id -- JOIN conditions should be in ON clauses
WHERE t.trait_id in (447, 1) AND -- <-- HERE GOES TRAIT IDS
genomic_pos BETWEEN start AND end
GROUP BY d.domain_id
HAVING COUNT(DISTINCT t.trait_id) = 2;